You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:10:27