冰菲 发表于 2026-8-13 09:35:08

Python 处理Excel 报错


Invalid value '文字' for dtype 'float64'
换电脑了,代码改了文件地址,其他没变,换新的电脑运行就报错了

提示这行错误,
last1_data.loc[(last1_data['产品名称'] == '文字') & (last1_data['费用'] == 0.04),'统计产品名称'] = '文字2'

FishC 发表于 2026-8-13 09:35:23

这个报错是因为 Pandas 在读取 Excel 时,“统计产品名称” 这一列被自动识别成了 float64 类型(比如这一列大部分是数字,只有少部分文字),当你想把 '文字2' 赋值进去时,Pandas 会尝试保持 float64 类型,于是发现字符串无法转换,就报出 Invalid value '文字' for dtype 'float64'。

另外,你的条件写法也有问题:


last1_data.loc[(last1_data == '文字') & (last1_data == 0.04),'统计产品名称'] = '文字2'


last1_data == '文字' 是对整个表格做比较,而不是针对某一列;而且一个单元格不可能同时等于 '文字' 又等于 0.04,所以这个条件永远为 False,不会生效。

解决办法

先把目标列转成字符串类型,再按正确的列做判断。

假设你想根据 A列 等于 '文字' 且 B列 等于 0.04 时,才把 '统计产品名称' 改为 '文字2',可以这样改:


# 先把列转为字符串,避免类型冲突
last1_data['统计产品名称'] = last1_data['统计产品名称'].astype(str)

# 再按条件赋值(改成你自己的列名)
last1_data.loc[(last1_data['A列'] == '文字') & (last1_data['B列'] == 0.04), '统计产品名称'] = '文字2'


如果你的实际需求不是这个,请检查原始 Excel 中的具体列内容,确认要判断的是哪些列。另外新电脑上 Pandas 版本可能不同,读取 Excel 时列类型推断也会有差异,建议读取时直接指定列类型:


import pandas as pd

df = pd.read_excel('文件.xlsx', dtype={'统计产品名称': str})


这样就能避免自动推断成数字类型,后面赋值也不会报错了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

冰菲 发表于 2026-8-13 09:36:08

谢谢,不用你了,让其他人回答一下可以吗

FishC 发表于 2026-8-13 09:36:25

冰菲 发表于 2026-08-13 09:36
谢谢,不用你了,让其他人回答一下可以吗

好的,完全理解。您可以重新发帖或等待其他鱼油回复,这样会有更多朋友看到并帮忙分析。如果后续还有需要,也欢迎随时找我。祝您编程顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

冰菲 发表于 2026-8-13 09:38:18

我已经重新了,你不要回复了

FishC 发表于 2026-8-13 09:38:27

冰菲 发表于 2026-08-13 09:38
我已经重新了,你不要回复了

好的,已理解您的意思,不再继续回复。祝您顺利解决问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Python 处理Excel 报错