在 python 2.7.4 Anaconda 上从 series 转换为 str 的问题
Issue converting from series to str on python 2.7.4 Anaconda
import sys
sys.version
'2.7.8 |Anaconda 2.1.0 (64-bit)| (default, Jul 2 2014, 15:12:11) [MSC
v.1500 64 bit (AMD64)]'
from pandas import DataFrame,Series
import datetime
id = [199995,199996,199997]
hour = [14102101,14102102,14102103]
df = pd.DataFrame({'id':Series(id),'hour':Series(hour)})
kk=df.hour.apply(str)
df_dt=datetime.datetime.strptime(kk,"%y%m%d%H").date()
TypeError: must be string, not Series
我从关系数据库的时间维度 table 中获取了这些数据,因此我无法真正改变导入格式。我该如何解决这个错误?
您正在将 kk
传递给您的 strptime(...)
,这是一个需要字符串的系列。如果你想像这样打印出每个日期,你可以遍历系列中的行:
for i in range(len(kk)):
df_dt=datetime.datetime.strptime(kk[i],"%y%m%d%H")
print(df_dt)
这会给你
2014-10-21 01:00:00
2014-10-21 02:00:00
2014-10-21 03:00:00
2014-10-21 03:00:00
但是,我猜测你想要的输出是什么,因为你没有在你的原始问题中指定它。
编辑
使用 IPython Notebook 中的 %timeit
模块 运行 for
循环与 apply.(lambda ...)
相比快了 3 倍多一点。
1000 loops, best of 3: 91.6 µs per loop
1000 loops, best of 3: 345 µs per loop
df['hour_dt']=df.hour.apply(lambda x:datetime.datetime.strptime(x.astype(str),"%y%m%d%H") )
import sys
sys.version
'2.7.8 |Anaconda 2.1.0 (64-bit)| (default, Jul 2 2014, 15:12:11) [MSC v.1500 64 bit (AMD64)]'
from pandas import DataFrame,Series
import datetime
id = [199995,199996,199997]
hour = [14102101,14102102,14102103]
df = pd.DataFrame({'id':Series(id),'hour':Series(hour)})
kk=df.hour.apply(str)
df_dt=datetime.datetime.strptime(kk,"%y%m%d%H").date()
TypeError: must be string, not Series
我从关系数据库的时间维度 table 中获取了这些数据,因此我无法真正改变导入格式。我该如何解决这个错误?
您正在将 kk
传递给您的 strptime(...)
,这是一个需要字符串的系列。如果你想像这样打印出每个日期,你可以遍历系列中的行:
for i in range(len(kk)):
df_dt=datetime.datetime.strptime(kk[i],"%y%m%d%H")
print(df_dt)
这会给你
2014-10-21 01:00:00
2014-10-21 02:00:00
2014-10-21 03:00:00
2014-10-21 03:00:00
但是,我猜测你想要的输出是什么,因为你没有在你的原始问题中指定它。
编辑
使用 IPython Notebook 中的 %timeit
模块 运行 for
循环与 apply.(lambda ...)
相比快了 3 倍多一点。
1000 loops, best of 3: 91.6 µs per loop
1000 loops, best of 3: 345 µs per loop
df['hour_dt']=df.hour.apply(lambda x:datetime.datetime.strptime(x.astype(str),"%y%m%d%H") )