【问题标题】:How do I convert dates into ISO-8601 DateTime format in a Pandas dataframe如何在 Pandas 数据框中将日期转换为 ISO-8601 DateTime 格式
【发布时间】:2013-09-08 05:21:17
【问题描述】:

我有下面的数据框(使用 python/pandas)并希望转换

q_string          q_visits  q_date
red               1790  02/10/2012 00:00
blue              364   02/10/2012 00:00
current           280   02/10/2012 00:00
molecular         259   02/10/2012 00:00
cell              201   02/10/2012 00:00

如何将“q_date”字段转换为 SO-8601 日期时间格式 (yyyy-MM-ddTHH:mm:ssZ)?

提前致谢。

【问题讨论】:

    标签: python date pandas


    【解决方案1】:

    我会使用pd.to_datetime.dt accessor

    pd.to_datetime(df['q_date']).dt.strftime('%Y-%m-%dT%H:%M:%SZ')
    

    另见strftime() and strptime() Format Codes

    【讨论】:

      【解决方案2】:

      使用 pandas datetools 解析器解析日期,然后使用标准 python strftime 函数对其进行格式化。

      >>> df['q_date'].apply(
              lambda x: pd.datetools.parse(x).strftime('%Y-%m-%dT%H:%M:%SZ'))
      0    20120210T00:0000Z
      1    20120210T00:0000Z
      2    20120210T00:0000Z
      3    20120210T00:0000Z
      4    20120210T00:0000Z
      Name: q_date, dtype: object
      

      【讨论】:

      • viktor 将其保留为对象 dtype,所以没那么有用,最好使用 to_datetime
      • @Jeff我同意,只是OP要求一个字符串,我写的方法比pd.to_datetime(df['q_date']).apply(lambda x: x.strftime(...))快一点所以我选择了那个。
      • 我认为M 后面的% 符号不应该存在。对我来说,使用 pandas v 1.2.4 的格式化字符串是 '%Y-%m-%dT%H:%M:%SZ'
      【解决方案3】:

      首先将您的q_date 列转换为datetime64[ns] 系列,然后使用自定义格式字符串将map 转换为列

      In [178]: df = df.convert_objects(convert_dates='coerce')
      
      In [179]: df
      Out[179]:
          q_string  q_visits              q_date
      0        red      1790 2012-02-10 00:00:00
      1       blue       364 2012-02-10 00:00:00
      2    current       280 2012-02-10 00:00:00
      3  molecular       259 2012-02-10 00:00:00
      4       cell       201 2012-02-10 00:00:00
      
      In [180]: df['iso_q_date'] = df.q_date.map(lambda x: datetime.datetime.strftime(x, '%y%m%dT%H:%M%SZ'))
      
      In [181]: df
      Out[181]:
          q_string  q_visits              q_date       iso_q_date
      0        red      1790 2012-02-10 00:00:00  120210T00:0000Z
      1       blue       364 2012-02-10 00:00:00  120210T00:0000Z
      2    current       280 2012-02-10 00:00:00  120210T00:0000Z
      3  molecular       259 2012-02-10 00:00:00  120210T00:0000Z
      4       cell       201 2012-02-10 00:00:00  120210T00:0000Z
      

      【讨论】:

        猜你喜欢
        • 2020-10-21
        • 1970-01-01
        • 2015-02-07
        • 1970-01-01
        • 2021-07-29
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多