在Pandas中,如何将日期字符串字符串转换为datetime对象并将它们放在DataFrame中?

Dic*_*man 50 python datetime pandas

import pandas as pd
date_stngs = ('2008-12-20','2008-12-21','2008-12-22','2008-12-23')

a = pd.Series(range(4),index = (range(4)))

for idx, date in enumerate(date_stngs):
    a[idx]= pd.to_datetime(date)
Run Code Online (Sandbox Code Playgroud)

此代码位产生错误:

TypeError:"'int'对象不可迭代"

谁能告诉我如何将这一系列日期时间字符串作为DateTime对象添加到DataFrame中?

fal*_*tru 55

>>> import pandas as pd
>>> date_stngs = ('2008-12-20','2008-12-21','2008-12-22','2008-12-23')
>>> a = pd.Series([pd.to_datetime(date) for date in date_stngs])
>>> a
0    2008-12-20 00:00:00
1    2008-12-21 00:00:00
2    2008-12-22 00:00:00
3    2008-12-23 00:00:00
Run Code Online (Sandbox Code Playgroud)

UPDATE

使用pandas.to_datetime(pd.Series(..)).它简洁,比上面的代码快得多.

>>> pd.to_datetime(pd.Series(date_stngs))
0   2008-12-20 00:00:00
1   2008-12-21 00:00:00
2   2008-12-22 00:00:00
3   2008-12-23 00:00:00
Run Code Online (Sandbox Code Playgroud)

  • 比`pd.to_datetime(pd.Series(date_stngs))慢一百倍.强烈不推荐这种方法. (12认同)
  • @waitingkuo,我升级到了0.11.0.你是对的.对我感到羞耻. (4认同)

wai*_*kuo 37

In [46]: pd.to_datetime(pd.Series(date_stngs))
Out[46]: 
0   2008-12-20 00:00:00
1   2008-12-21 00:00:00
2   2008-12-22 00:00:00
3   2008-12-23 00:00:00
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

更新:基准

In [43]: dates = [(dt.datetime(1960, 1, 1)+dt.timedelta(days=i)).date().isoformat() for i in range(20000)]

In [44]: timeit pd.Series([pd.to_datetime(date) for date in dates])
1 loops, best of 3: 1.71 s per loop

In [45]: timeit pd.to_datetime(pd.Series(dates))
100 loops, best of 3: 5.71 ms per loop
Run Code Online (Sandbox Code Playgroud)