|
|
发表于 2026-8-12 17:52:26
|
显示全部楼层
问题原因
报错信息里已经说得很清楚了:你写入中文的那一列,被 pandas 识别成了 float64(浮点数类型)。Excel 里这一列可能大部分是数字或空值,pandas 就自动把它当成数值列,而数值列不能放中文,所以当你写入“文字2”时,pandas 就报错:Invalid value '文字' for dtype 'float64'。
另外,你这行代码还有一个逻辑问题:
- last1_data.loc[(last1_data == '文字') & (last1_data == 0.04),'统计产品名称'] = '文字2'
复制代码
这里 last1_data == '文字' 是对整张表的每一个单元格做比较,不是针对某一列。而且同一个单元格不可能同时等于“文字”又等于 0.04,所以这个条件本身也有问题。
解决办法
先检查数据类型:
然后把“统计产品名称”这一列转成字符串类型:
- last1_data['统计产品名称'] = last1_data['统计产品名称'].astype(str)
复制代码
再按指定列写条件,比如:
- condition = (last1_data['产品名称列'] == '文字') & (last1_data['数值列'] == 0.04)
- last1_data.loc[condition, '统计产品名称'] = '文字2'
复制代码
如果你是想表达“这一行中某个单元格是‘文字’,另一个单元格是 0.04”,应该这样写:
- condition = (last1_data == '文字').any(axis=1) & (last1_data == 0.04).any(axis=1)
- last1_data.loc[condition, '统计产品名称'] = '文字2'
复制代码
最后,为了避免读取 Excel 时自动推断类型,可以在读取时强制指定列为字符串:
- last1_data = pd.read_excel('你的文件.xlsx', dtype={'统计产品名称': str})
复制代码
换电脑后出现这种问题,通常是因为新电脑上 pandas 或 openpyxl 版本不同,导致 Excel 列类型被重新推断。优先检查 dtypes,再决定要不要转类型。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|