如何在 Pandas 数据框中将日期转换为 ISO-8601 DateTime 格式
Posted
技术标签:
【中文标题】如何在 Pandas 数据框中将日期转换为 ISO-8601 DateTime 格式【英文标题】:How do I convert dates into ISO-8601 DateTime format in a Pandas dataframe 【发布时间】: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)?
提前致谢。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何在 Pandas 数据框中将日期转换为 ISO-8601 DateTime 格式的主要内容,如果未能解决你的问题,请参考以下文章
如何在python中将字符串转换为pandas数据框[重复]