使用Pandas to_datetime()格式化日期时出现AttributeError错误求助
解决Pandas to_datetime()报错:AttributeError: 'tuple' object has no attribute 'lower'
嘿,这个错误我之前踩过坑!大概率是你给to_datetime()传参的时候,不小心把某个本该是字符串/Series的参数弄成了元组(tuple),导致Pandas内部调用字符串方法时出错。咱们来具体分析:
错误根源
这个报错的核心是:Pandas在处理日期格式时,会尝试调用字符串的lower()方法(比如解析格式参数、处理错误选项时),但如果它拿到的是元组,自然就没有这个属性了。最常见的场景有两种:
1. 误将format参数设为元组
比如你本来想指定日期格式,结果不小心多打了个逗号,把字符串变成了元组:
import pandas as pd df = pd.DataFrame({'date': ['2023-10-01', '2023-10-02']}) # 错误写法:format参数变成了元组(多了逗号) pd.to_datetime(df['date'], format=('%Y-%m-%d',))
这里format=('%Y-%m-%d',)是一个单元素元组,而to_datetime()期望format是字符串类型,所以触发了错误。
2. 待转换的日期数据中混有元组
如果你的日期列里不小心混入了元组类型的元素,比如:
df = pd.DataFrame({'date': [('2023-10-01',), '2023-10-02']}) pd.to_datetime(df['date'])
Pandas尝试把元组转换成日期时,同样会因为调用字符串方法失败而报错。
解决方法
针对不同场景,修正方式如下:
- 检查参数格式:确保
format、errors这类接受字符串的参数是纯字符串,不要写成元组(删掉多余的逗号)。比如把上面的错误写法改成:pd.to_datetime(df['date'], format='%Y-%m-%d') - 清理日期数据:如果是数据里混了元组,先把元组转换成字符串。比如用
apply处理:df['date'] = df['date'].apply(lambda x: x[0] if isinstance(x, tuple) else x) pd.to_datetime(df['date']) - 批量处理多列:如果要转换多列日期,别把列名元组直接传给
format,而是用apply批量处理:df[['date1', 'date2']] = df[['date1', 'date2']].apply(pd.to_datetime)
只要把这些细节修正,to_datetime()就能正常工作啦!
内容的提问来源于stack exchange,提问作者M. Holm
相关产品推荐
相关产品推荐

