使用Pandas和Rpy2中的时区处理时间戳

2024-09-29 21:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解如何将包含时间戳的行添加到具有数据类型为datetime64[ns,UTC]的列的Pandas数据帧中。不幸的是,当我添加一行时,列数据类型会更改为object,这最终会中断通过Rpy2到R数据帧的转换

下面是我看到问题的有趣代码行,其中包含调试打印语句,我也将分享这些语句的输出。变量观察是一个简单的python列表,其第一个值是时间戳。代码:

print('A: df.dtypes[0] = {}'.format(str(df.dtypes[0])))
print('observation[0].type = {}, observation[0].tzname() = {}'.format(str(type(observation[0])), observation[0].tzname()))
df.loc[len(df)] = observation
print('B: df.dtypes[0] = {}'.format(str(df.dtypes[0])))

以下是上述代码段的输出:

A: df.dtypes[0] = datetime64[ns, UTC]
observation[0].type = <class 'datetime.datetime'>, observation[0].tzname() = UTC
B: df.dtypes[0] = object

我观察到的是,当我附加行时,列的数据类型正在改变。据我所知,Pandas正在添加时间戳作为的一个实例。rpy2 pandas2ri模块似乎无法转换该类的值

到目前为止,我还无法找到一种方法,让我在数据帧中追加一行,并为timestamp列保留列类型。欢迎提出建议

=============================================

更新

我已经能够以一种老套的方式解决这个问题了。我从值列表中创建一个一行临时数据帧,然后为这个一行数据帧设置列上的类型。然后我将这个临时数据帧中的行附加到我正在处理的数据帧中。这是我能够识别的唯一一种保留我附加到的数据帧的列类型的方法。这几乎足以让我渴望一种强类型语言

我更喜欢一个更优雅的解决方案,所以我保留这个选项,以防有人提出建议


Tags: 数据format类型dftype时间数据类型utc

热门问题