【发布时间】:2020-05-18 18:54:27
【问题描述】:
我正在尝试了解如何将包含时间戳的行添加到 Pandas 数据框中,该数据框的数据类型为 datetime64[ns, UTC]。不幸的是,当我添加一行时,列数据类型更改为对象,这最终会破坏通过 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])))
这是上面代码sn -p的输出:
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 模块似乎无法转换该类的值。
到目前为止,我一直无法找到一种方法,可以让我在数据框中附加一行并保留时间戳列的列类型。欢迎提出建议。
===========================
更新
我已经能够以一种老套的方式解决这个问题。我从值列表中创建了一个单行临时数据框,然后在此单行数据框的列上设置类型。然后我将这个临时数据帧中的行附加到我正在处理的那个。这是我能够识别的唯一方法,它保留了我要附加到的数据框的列类型。这几乎足以让我喜欢一种强类型语言。
我更喜欢更优雅的解决方案,所以我将把它留着,以防有人提出建议。
【问题讨论】: