【问题标题】:DataTimeIndex to ISO 8601 string日期时间索引到 ISO 8601 字符串
【发布时间】:2021-03-17 17:00:46
【问题描述】:

我有一个 pandas 数据框 t,我想将其索引(以 datetime64 对象的形式)转换为 ISO 8601 字符串。

t.index

DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 01:00:00',
               '2011-01-01 02:00:00', '2011-01-01 03:00:00',
               '2011-01-01 04:00:00'],
              dtype='datetime64[ns]', name='datetime', freq=None)

当我将索引转换为系列,然后使用 .dt 访问系列的 datetimelike 属性时,我得到了一个包含两种格式的 datetime 对象:

times = times.to_series().dt.strftime('%Y-%m-%dT%H:%M%:%SZ')
print(str(times))

datetime
2011-01-01 00:00:00    2011-01-01T00:00:00Z
2011-01-01 01:00:00    2011-01-01T01:00:00Z
2011-01-01 02:00:00    2011-01-01T02:00:00Z
2011-01-01 03:00:00    2011-01-01T03:00:00Z
2011-01-01 04:00:00    2011-01-01T04:00:00Z
Name: datetime, dtype: object

为什么这会并排返回两种不同的格式?如何只返回第二种(ISO 8601)格式的字符串?

【问题讨论】:

    标签: python pandas datetime python-datetime


    【解决方案1】:

    当您执行to_series 时,它会将索引复制到值中,并创建同时继承原始索引的系列。

    times = times.to_series()
    print(str(times))
    
    datetime
    2011-01-01 00:00:00    2011-01-01 00:00:00
    2011-01-01 01:00:00    2011-01-01 01:00:00
    2011-01-01 02:00:00    2011-01-01 02:00:00
    2011-01-01 03:00:00    2011-01-01 03:00:00
    

    【讨论】:

    • 谢谢,但to_series() 是应用 dt 访问器所必需的。如果我只对第二个转换后的系列的输出感兴趣,如何防止结转原始索引或删除原始索引?
    • times.to_series().reset_index(drop=True) @the_darkside
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2011-04-25
    • 1970-01-01
    • 2021-01-17
    • 2017-04-29
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多