【问题标题】:Pandas: converting int64 years to datetime dsiplaying only the yearPandas:将 int64 年转换为仅显示年份的日期时间
【发布时间】:2018-05-11 22:02:19
【问题描述】:

我有一个如下所示的数据框索引:

df.index
Int64Index([1992, 1993, 1994, 1995], dtype='int64')

但希望将其转换为日期时间,同时仅显示年份,从而保留上述年度格式。

我尝试过: Pandas: how to convert an index of int64 years to datetime

import pandas as pd
df.index = pd.to_datetime(df.index, format='%Y')

但这给了我:

DatetimeIndex(['1992-01-01', '1993-01-01', '1994-01-01', '1995-01-01'], dtype='datetime64[ns]', freq=None)

相反,有没有更好的方法可以让我得到类似的东西:

DatetimeIndex(['1992', '1993', '1994', '1995'], dtype='datetime64)

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案1】:

    PeriodIndex 呢?

    In [131]: i = pd.Int64Index([1992, 1993, 1994, 1995], dtype='int64')
    
    In [132]: pd.PeriodIndex(i, freq='A')
    Out[132]: PeriodIndex(['1992', '1993', '1994', '1995'], dtype='period[A-DEC]', freq='A-DEC')
    

    【讨论】:

    • 也许我需要更多的研究;0
    • @Bharath,是的,我花了几分钟才想起这个类的名称 :-) Pandas API 是如此巨大......
    • 但是,只要有你们的回答,我永远不会忘记。它的打击如此之大,我不知道:)
    • @MaxU,我试过你的方法,但我得到一个 ValueError: Invalid frequency: Y
    • @Folarin,改用“A”。我针对 Pandas 0.21.0 对其进行了测试。很可能你有一个旧版本
    【解决方案2】:

    使用PeriodIndex,因为没有months 和days 就无法创建DatetimeIndex

    idx = pd.Int64Index([1992, 1993, 1994, 1995])
    print (idx)
    Int64Index([1992, 1993, 1994, 1995], dtype='int64')
    
    per = pd.PeriodIndex(idx, freq='A')
    print (per)
    PeriodIndex(['1992', '1993', '1994', '1995'], dtype='period[A-DEC]', freq='A-DEC')
    

    【讨论】:

    • 用你的方法,我得到了; PeriodIndex(['3962', '3963', '3964', '3965'], dtype='period[A-DEC]', freq='A-DEC') 即 3962 年到 3965 年
    • 但如果需要只有years 的日期时间,它在python 中不存在,您需要的最接近的是periodindex。日期时间只有年份的原因是什么?
    • @jezreal,真的吗?那很奇怪。我期待的是 1992 年到 1995 年。你用的是什么版本的熊猫?
    • 哎呀,你是对的,这是错误的输出。我使用0.21.0。但是这样做的理由是什么?也许这没有必要。
    • 我觉得最好升级pandas,也许是bug。
    【解决方案3】:

    我觉得这很有用

    df.index = pd.to_datetime(df.index, format='%Y').year
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      相关资源
      最近更新 更多