如何将Excel体重列中被识别为时间格式的数值转换为float类型数字
体重列异常日期格式转float解决方案
出现该问题的核心原因是Excel的日期存储本质为浮点型序列号(1900年1月1日对应数值1),部分数值被pandas自动识别为日期格式后,无法直接参与数值计算。你可以选择以下两种方案修复:
方案1:现有代码最小修改,拼接数据集后统一转换
在WEM=pd.concat(li,axis=0,ignore_index=True)代码之后,添加如下转换逻辑即可:
# 转换体重列:先把识别为日期的数值转回Excel序列号,再统一转float WEM['weight (KG)'] = pd.to_numeric( WEM['weight (KG)'].apply( lambda x: x.toordinal() - pd.Timestamp('1899-12-30').toordinal() if isinstance(x, pd.Timestamp) else x ), errors='coerce' # 无法转换的异常值自动转为NaN,透视表求和会自动忽略该类值 )
注:减
1899-12-30的日期序数是为了兼容Excel历史闰年计算bug,和Excel日期序列号规则对齐。
方案2:读取文件时指定类型,从源头避免识别错误
修改读Excel的逻辑,强制体重列按字符串读取,后续统一转数值,彻底避免自动识别为日期的问题:
for file in allFiles: df=pd.read_excel( file, index_col=False, dtype={'weight (KG)': str} # 强制体重列按字符串读取 ) li.append(df) WEM=pd.concat(li,axis=0,ignore_index=True) # 统一转float类型 WEM['weight (KG)'] = pd.to_numeric(WEM['weight (KG)'], errors='coerce')
转换完成后可执行WEM['weight (KG)'].dtype验证类型,确认输出为float64后即可正常生成透视表。
内容的提问来源于stack exchange,提问作者Valkyrie
相关产品推荐
相关产品推荐

