在pandas如何将一个datestring的string转换为date时间对象,并把它们放在一个DataFrame?

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) 

这个码位产生错误:

TypeError:“'int'对象不可迭代”

任何人都可以告诉我如何将这一系列的date时间string作为DateTime对象到DataFrame?

 >>> 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 

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 
 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] 

更新:基准

 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 

一个简单的解决scheme涉及到Series构造函数。 您可以简单地将数据types传递给dtype参数。 另外, to_datetime函数现在可以接受一串string。

创build数据

 date_strings = ('2008-12-20','2008-12-21','2008-12-22','2008-12-23') 

所有三个产生相同的东西

 pd.Series(date_strings, dtype='datetime64[ns]') pd.Series(pd.to_datetime(date_strings)) pd.to_datetime(pd.Series(date_strings)) 

基准

@waitingkuo提供的基准是错误的。 第一种方法比其他两种方法稍慢,它们具有相同的性能。

 import datetime as dt dates = [(dt.datetime(1960, 1, 1)+dt.timedelta(days=i)).date().isoformat() for i in range(20000)] * 100 %timeit pd.Series(dates, dtype='datetime64[ns]') 730 ms ± 9.06 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) %timeit pd.Series(pd.to_datetime(dates)) 426 ms ± 3.45 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) %timeit pd.to_datetime(pd.Series(dates)) 430 ms ± 5.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)