Python Pandas日期格式转换报错求助:解决Series真值歧义问题
解决Pandas日期格式转换报错问题
报错原因
你代码里的if mesStrava == 'out':直接对整个Series做布尔判断,Pandas无法确定整个Series的真值(因为Series包含多个元素,有的可能等于'out',有的不等于),所以抛出ValueError: The truth value of a Series is ambiguous错误。另外你原代码中对日期字符串的索引截取也存在错误,导致无法正确获取月份部分。
解决方案
方案一:修复原有拆分逻辑(批量处理月份)
通过字典映射批量替换月份缩写,替代单个if判断:
import pandas as pd fileIn = 'C:/Users/xxx.xlsx' df = pd.read_excel(fileIn, index_col=0) # 正确拆分日期各部分(针对格式'21 Sep 2022 04:37:17') diaStrava = df['Data da atividade'].str[:2] mesStrava = df['Data da atividade'].str[4:7] # 提取月份缩写(如'Sep'/'out') anoStrava = df['Data da atividade'].str[8:12] # 提取4位年份 horaStrava = df['Data da atividade'].str[13:] # 提取时间部分 # 定义葡萄牙语月份缩写到数字的映射 mes_mapping = { 'jan': '01', 'fev': '02', 'mar': '03', 'abr': '04', 'mai': '05', 'jun': '06', 'jul': '07', 'ago': '08', 'set': '09', 'out': '10', 'nov': '11', 'dez': '12' } # 批量转换月份缩写为两位数字 c_mesStrava = mesStrava.str.lower().map(mes_mapping) # 拼接成目标格式'2022-09-21 04:37:17' dataStrava = anoStrava + '-' + c_mesStrava + '-' + diaStrava + ' ' + horaStrava
方案二:使用Pandas内置日期转换(更简洁可靠)
不用手动拆分字符串,直接利用pd.to_datetime解析日期,再格式化输出:
import pandas as pd # 若月份是葡萄牙语缩写,需设置对应locale import locale locale.setlocale(locale.LC_TIME, 'pt_BR.UTF-8') fileIn = 'C:/Users/xxx.xlsx' df = pd.read_excel(fileIn, index_col=0) # 解析原始日期字符串为datetime类型 df['Data da atividade'] = pd.to_datetime(df['Data da atividade'], format='%d %b %Y %H:%M:%S') # 格式化为目标字符串格式 dataStrava = df['Data da atividade'].dt.strftime('%Y-%m-%d %H:%M:%S')
说明:
%d %b %Y %H:%M:%S是对应原始日期格式的解析规则,其中%b匹配月份缩写;若系统locale不支持葡萄牙语,可能需要调整locale参数(比如Linux下用'pt_BR.utf8')。
内容的提问来源于stack exchange,提问作者Paulo Alexandre G. Nunes
相关产品推荐
相关产品推荐

