使用pd.read_csv读取CSV时,如何获取datetime.datetime类型而非timestamp?
解决pandas读取CSV时日期列转为datetime.datetime而非Timestamp的问题
首先明确:pandas中的Timestamp是Python原生datetime.datetime的子类,绝大多数场景下可以直接当作datetime对象使用,比如调用strftime()、时间比较等操作都完全兼容。但如果你的业务逻辑必须依赖原生datetime.datetime类型,可以通过以下方式处理:
方法一:读取后批量转换(推荐)
这是最直接可靠的方式,读取完成后对日期列调用.dt.to_pydatetime()方法,即可将整列Timestamp转为原生datetime对象:
import pandas as pd # 正常读取并解析日期列 df = pd.read_csv('your_data.csv', parse_dates=['date_column']) # 转换为原生datetime.datetime类型 df['date_column'] = df['date_column'].dt.to_pydatetime()
方法二:读取时自定义解析函数
通过date_parser参数指定自定义解析函数,强制返回datetime.datetime对象。不过需要注意:pandas内部仍可能将其包装为Timestamp,所以这种方式不如方法一稳定,仅在特定场景下适用:
from datetime import datetime import pandas as pd # 自定义日期解析函数,根据你的CSV日期格式调整格式字符串 def custom_date_parser(date_str): return datetime.strptime(date_str, '%Y-%m-%d') df = pd.read_csv('your_data.csv', parse_dates=['date_column'], date_parser=custom_date_parser) # 若结果仍为Timestamp,再调用一次to_pydatetime()即可
总结:如果不是必须用原生datetime,建议直接使用pandas的Timestamp,它提供了更多适配数据分析的功能;如果确实需要原生对象,优先用方法一进行转换。
内容的提问来源于stack exchange,提问作者younghyun
相关产品推荐
相关产品推荐

