Pandas保存ISO格式的日期?

zvms9eto  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(100)

我正在尝试生成一个Pandas数据框,其中date_range是一个索引。然后将其保存到CSV文件,以便以ISO-8601格式写入日期。

import pandas as pd
import numpy as np
from pandas import DataFrame, Series

NumberOfSamples = 10
dates = pd.date_range('20130101',periods=NumberOfSamples,freq='90S')
df3 = DataFrame(index=dates)
df3.to_csv('dates.txt', header=False)

dates.txt的当前输出为:

2013-01-01 00:00:00
2013-01-01 00:01:30
2013-01-01 00:03:00
2013-01-01 00:04:30
...................

我想让它看起来像:

2013-01-01T00:00:00Z
2013-01-01T00:01:30Z
2013-01-01T00:03:00Z
2013-01-01T00:04:30Z
....................
lp0sw83n

lp0sw83n1#

使用datetime.strftime并在索引上调用map

In [72]:

NumberOfSamples = 10
import datetime as dt
dates = pd.date_range('20130101',periods=NumberOfSamples,freq='90S')
df3 = pd.DataFrame(index=dates)
df3.index = df3.index.map(lambda x: dt.datetime.strftime(x, '%Y-%m-%dT%H:%M:%SZ'))
df3
Out[72]:
Empty DataFrame
Columns: []
Index: [2013-01-01T00:00:00Z, 2013-01-01T00:01:30Z, 2013-01-01T00:03:00Z, 2013-01-01T00:04:30Z, 2013-01-01T00:06:00Z, 2013-01-01T00:07:30Z, 2013-01-01T00:09:00Z, 2013-01-01T00:10:30Z, 2013-01-01T00:12:00Z, 2013-01-01T00:13:30Z]

在我看来,另一种更好的方法(多亏了@unutbu)是向to_csv传递一个格式说明符:

df3.to_csv('dates.txt', header=False, date_format='%Y-%m-%dT%H:%M:%SZ')
cvxl0en2

cvxl0en22#

使用pd.Index.strftime

如果您确定所有日期都是UTC,则可以硬编码格式:

df3.index = df3.index.strftime('%Y-%m-%dT%H:%M:%SZ')

它给出2013-01-01T00:00:00Z等等。注意“Z”表示UTC!

使用pd.Timestamp.isoformatpd.Index.map

df3.index = df3.index.map(lambda timestamp: timestamp.isoformat())

2013-01-01T00:00:00.如果你先给日期加上一个时区(比如把tz="UTC"传递给date_range),你会得到:2013-01-01T00:00:00+00:00,它也符合ISO-8601,但表示法不同。这适用于任何dateutilpytz时区,当时钟从夏令时切换到标准时间时,不会留下模糊的空间。

相关问题