如何将日期转换成 ISO-8601 DateTime 格式在 Pandas 数据框中?

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 DateTime格式(yyyy-MM-ddTHH:mm:ssZ)?
提前感谢。
5个回答

27

14
使用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

2
Viktor,这会将其保留为对象数据类型,因此并不是很有用,最好使用to_datetime。 - Jeff
2
@Jeff 我同意,只是原帖要求一个字符串,而我写的方法比 pd.to_datetime(df['q_date']).apply(lambda x: x.strftime(...)) 稍微快一点,所以我选择了那个方法。 - Viktor Kerkez
1
我认为在 M 后面的 % 符号不应该存在。对于我来说,使用 pandas v 1.2.4,有效的格式化字符串是 '%Y-%m-%dT%H:%M:%SZ' - gionni

1

使用 to_datetime 将日期时间转换为 pandas 格式,使用 strftime 将其转换为所需格式。

currentDate = pd.to_datetime(df['q_date'])
convertDate = currentDate.strftime('%Y-%m-%dT%H:%M:%S.%fZ')

或者使用isoformat将其转换为ISO格式。

convertDate = currentDate.isoformat()

0
为了保留时间而不仅仅是日期,请使用pd.Timestamp.isoformat函数:
df.q_date = df.q_date.pipe(pd.to_datetime).apply(pd.Timestamp.isoformat) + 'Z'

FYI,timespec参数允许指定要包含的时间的附加条件。

0

首先将您的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接