【问题标题】:pandas can't compare offset-naive and offset-aware datetimespandas 无法比较 offset-naive 和 offset-aware 日期时间
【发布时间】:2018-02-27 22:31:58
【问题描述】:

我有这样的df:

df['Time']
2017-08-06 11:00:00+00:00
2017-08-08 15:00:00+00:00
2017-08-10 04:00:00+00:00
2017-08-12 23:00:00+00:00
2017-08-08 15:00:00+00:00

我想用条件切片

mask1=df['Time'] > datetime.datetime.strptime('2017-08-12', "%Y-%m-%d")

我收到类似

的错误

无法比较原始偏移和可感知偏移的日期时间

不知何故,我必须将 df['Time'] 转换为 offset-naive。
请帮我解决这个问题。

【问题讨论】:

    标签: python-2.7 pandas


    【解决方案1】:

    看来你需要:

    df['Time'] = df['Time'].dt.tz_localize(None)
    

    或者:

    df['Time'] = df['Time'].dt.tz_convert(None)
    

    或者:

    df['Time'] = df['Time'].astype('datetime64[ns]')
    

    另见tz aware dtypes

    【讨论】:

    • 我尝试了第三个选项。它以 2017-08-12T23:00:00.000000000 格式转换日期时间。然后我尝试了前两个选项,但输出 df 保持相同的格式。如何转换为简单格式 2017-08-12 23:00:00。我正在将 o/p 打印到 csv 文件。当我在 o/p 终端上打印时,格式是严格的。
    • 嗯,似乎使用的是旧版本的熊猫。所以也许可以帮助df['Time'] = pd.to_datetime(df['Time'].astype('datetime64[ns]'))
    • 也试过这个选项。它是相同的o / p。我正在使用 >>> pd.__version__ '0.16.2'
    • 那就是bug。最后一个版本是0.20.3 - 没有错误。
    • 是的。所有三个选项都不能以预期的格式工作。将检查您提到的版本。谢谢
    猜你喜欢
    • 2021-03-23
    • 2012-05-26
    • 2017-09-16
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 2015-07-20
    相关资源
    最近更新 更多