【问题标题】:Handling timestamps with timezones in Pandas and Rpy2在 Pandas 和 Rpy2 中处理带有时区的时间戳
【发布时间】: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 模块似乎无法转换该类的值。

到目前为止,我一直无法找到一种方法,可以让我在数据框中附加一行并保留时间戳列的列类型。欢迎提出建议。

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

更新

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

我更喜欢更优雅的解决方案,所以我将把它留着,以防有人提出建议。

【问题讨论】:

    标签: python pandas rpy2


    【解决方案1】:

    查看这篇文章以获得答案,尤其是 Wes McKinney 的答案:

    Converting between datetime, Timestamp and datetime64

    【讨论】:

    • 我读了那篇文章,但它似乎没有回答这个问题。如果我将观察列表的第一个参数转换为 numpy.datetime64,我会得到与列数据类型从“datetime64[ns, UTC]”更改为“object”相同的行为,并且将数据帧转换为 R 对象失败因为它无法确定如何转换对象。
    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2021-03-24
    相关资源
    最近更新 更多