我有一个巨大的DataFrame,它包含日期时间表示的整数形式的索引,例如20171001
。我要做的是将表单(例如20171001
)更改为日期时间格式'2017-10-01'
。
为简单起见,我生成了这样一个数据帧。
>>> df = pd.DataFrame(np.random.randn(3,2), columns=list('ab'), index=
[20171001,20171002,20171003])
>>> df
a b
20171001 2.205108 0.926963
20171002 1.104884 -0.445450
20171003 0.621504 -0.584352
>>> df.index
Int64Index([20171001, 20171002, 20171003], dtype='int64')
如果我们应用' to_datetime'对于df.index,我们得到了奇怪的结果:
>>> pd.to_datetime(df.index)
DatetimeIndex(['1970-01-01 00:00:00.020171001',
'1970-01-01 00:00:00.020171002',
'1970-01-01 00:00:00.020171003'],
dtype='datetime64[ns]', freq=None)
我想要的是DatetimeIndex(['2017-10-01', '2017-10-02', '2017-10--3'], ...)
我该如何处理这个问题?请注意,该文件已被给出。
答案 0 :(得分:6)
在format %Y%m%d
中使用pd.to_datetime
,即
pd.to_datetime(df.index, format='%Y%m%d')
DatetimeIndex(['2017-10-01', '2017-10-02', '2017-10-03'], dtype='datetime64[ns]', freq=None)
指定df.index = pd.to_datetime(df.index, format='%Y%m%d')
答案 1 :(得分:1)
pd.to_datetime是熊猫的做法。但这里有两种选择:
import datetime
df.index = (datetime.datetime.strptime(str(i),"%Y%m%d") for i in df.index)
或
import datetime
df.index = df.index.map(lambda x: datetime.datetime.strptime(str(x),"%Y%m%d"))