Pandas DataFrame使用applymap格式化日期字段报错求助
问题解决方法
错误原因
你的报错并非applymap处理列名导致,而是目标列(比如month)中存在字符串值'month'(大概率是数据里混入了重复的表头行),执行int(x)时无法将该字符串转为整数,从而抛出ValueError。
解决方案
根据数据情况选择以下方法:
方法1:先清理无效行(针对混入表头的情况)
如果是数据里重复出现了表头行,先删除这些无效行再格式化:
target_cols = ["month", "day", "hour", "min", "s"] # 删除month列值为'month'的无效行 df2 = df2[df2['month'] != 'month'] # 格式化数字为两位字符串 df2[target_cols] = df2[target_cols].astype(int).applymap(lambda x: f"{x:02d}")
方法2:先转换数值类型并处理异常值
如果列中存在其他无法转成整数的无效值,先统一转换为数值类型,再格式化:
import pandas as pd target_cols = ["month", "day", "hour", "min", "s"] # 将列转为数值,无法转换的设为NaN df2[target_cols] = df2[target_cols].apply(pd.to_numeric, errors='coerce') # 格式化有效数值为两位字符串,NaN替换为'00'(可根据需求调整) df2[target_cols] = df2[target_cols].applymap(lambda x: f"{int(x):02d}" if pd.notna(x) else '00')
方法3:直接转换格式化(确保列中全为可转数字)
如果确认列中所有值都是字符串型数字或数值,可直接转换后格式化:
target_cols = ["month", "day", "hour", "min", "s"] df2[target_cols] = df2[target_cols].astype(int).applymap(lambda x: f"{x:02d}")
内容的提问来源于stack exchange,提问作者FrozzenFinger
相关产品推荐
相关产品推荐

