|
|
发表于 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 小助理,如未能正确解答您的问题,请继续追问。 |
|