Python Pandas代码报错咨询:SyntaxError与KeyError问题排查
小数转逗号分隔格式的问题排查与解决
问题背景
原本需求是移除列中的美元符号和逗号,因数据集无美元符号,转而尝试将reviews_per_month列的小数点替换为逗号(比如把0.20改成0,20),但运行代码后出现两个报错:
SyntaxError: EOL while scanning string literalKeyError: 'reviews per month'
当前reviews_per_month列数据类型为float64。
报错原因分析
1. 语法错误(SyntaxError)
你贴的代码最后一行末尾多了一个多余的双引号:
df["reviews per month"]=df["reviews_per_month"].apply(lambda x: remove_commas(x))" # 末尾的引号完全多余,直接删除即可
这会导致Python解析字符串时无法正确闭合,触发语法报错。
2. 键错误(KeyError)
KeyError是因为你试图访问df["reviews per month"]这个列,但该列在DataFrame中尚未存在——你是第一次创建这个列,赋值操作本身不会触发这个报错,大概率是语法错误导致代码执行中断,引发连锁问题,解决语法错误后该问题会自动消失。
核心问题:数据类型不匹配
你的reviews_per_month列是float64数值类型,而value.replace(".", ",")是字符串专属方法,直接对float类型调用会触发AttributeError(只是还没执行到这一步)。
要实现小数点换逗号的需求,本质是把数值类型转换成带逗号分隔的字符串类型——因为float类型本身只能用小数点作为分隔符,无法存储逗号格式的数值。
修正后的代码
import pandas as pd import numpy as np def convert_decimal_sep(value): if pd.isna(value): return np.NaN # 先把float转成字符串,再替换小数点为逗号 return str(value).replace(".", ",") # 创建新列存储转换后的字符串格式值 df["reviews_per_month_comma"] = df["reviews_per_month"].apply(convert_decimal_sep)
也可以用更简洁的写法:
# 先转字符串再替换分隔符 df["reviews_per_month_comma"] = df["reviews_per_month"].astype(str).str.replace(".", ",", regex=False) # 把转换后的"nan"字符串还原为NaN df["reviews_per_month_comma"] = df["reviews_per_month_comma"].replace("nan", np.NaN)
额外提示
如果只是为了显示时用逗号作为分隔符,不需要修改数据类型,直接设置pandas的显示格式即可:
pd.options.display.float_format = '{:,.2f}'.format.replace('.', ',')
这样数据底层还是float类型,不影响后续数值运算,只是显示时用逗号分隔。
内容的提问来源于stack exchange,提问作者Rosa_codes85
相关产品推荐
相关产品推荐

