Python 在Pandas中,如何将日期字符串转换为datetime对象并将其放入数据帧中?

Python 在Pandas中,如何将日期字符串转换为datetime对象并将其放入数据帧中?,python,datetime,pandas,Python,Datetime,Pandas,此代码位产生错误: TypeError:“'int'对象不可编辑” 谁能告诉我如何将这一系列日期时间字符串作为DateTime对象放入数据帧中 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[

此代码位产生错误:

TypeError:“'int'对象不可编辑”

谁能告诉我如何将这一系列日期时间字符串作为
DateTime
对象放入数据帧中

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)
更新

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

>>> 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
更新:基准
一个简单的解决方案涉及系列构造函数。只需将数据类型传递给
dtype
参数即可。另外,
to_datetime
函数现在可以获取字符串序列

创建数据

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
这三种产品都生产相同的产品 基准 @waitingkuo提供的基准是错误的。第一种方法比其他两种性能相同的方法慢一点

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

比pd.to_datetime(pd.Series(date_stngs))慢一百倍。强烈不推荐这种方法。@DickEshelman,waitingkuo的版本更优雅。@waitingkuo,我同意你的版本更简洁。但是你的版本比我的快不了100倍
timeit.timeit
我的,你的,显示的差别很小。@waitingkuo,我升级到了0.11.0。你是对的。“我真丢脸!”费米欧波尔塔,我也差不多。(Python 2.7.8,pandas 0.14.1,Windows 7):为什么要对
datetime->datetime
转换进行基准测试,而不是
str->datetime
?很抱歉,我错过了。对于2017+的答案,请参阅
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
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))
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)