为何用datetime.strptime转换DataFrame的time列未得到datetime类型?
问题解析:为什么转换后
time列还是Series类型? 你这里其实是混淆了两个关键概念:Series容器的类型和Series内部元素的数据类型。
核心误解
df_sales['time']本身就是一个pandas.core.series.Series对象——不管这个列里存的是字符串、数字还是日期时间,这个列的对象类型永远是Series。你真正需要验证的是列中元素是否变成了datetime类型,而非整个列的对象类型。
如何正确检查转换结果
别用type(df_sales['time'])来判断转换效果,而是用以下方式查看列的元素数据类型:
- 查看单个列的元素类型:
df_sales['time'].dtype - 查看整个DataFrame所有列的元素类型:
df_sales.dtypes
执行你的转换代码后,再运行上面的命令,你会发现time列的类型已经变成了datetime64[ns],这就说明转换成功了。
更高效的转换方法
另外,pandas提供了专门的日期转换函数pd.to_datetime(),比apply(lambda x: ...)更高效且简洁,推荐使用:
import pandas as pd df_sales['time'] = pd.to_datetime(df_sales['time'], format='%Y-%m-%d')
验证示例
假设转换前df_sales['time'].dtype是object(字符串类型),转换后执行df_sales['time'].dtype会返回datetime64[ns],而type(df_sales['time'])依然是pandas.core.series.Series——这完全是正常的,因为Series就是pandas用来存储单列数据的标准容器。
内容的提问来源于stack exchange,提问作者Daniel Garcia De Cceres Herran
相关产品推荐
相关产品推荐

