You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas代码报错咨询:SyntaxError与KeyError问题排查

小数转逗号分隔格式的问题排查与解决

问题背景

原本需求是移除列中的美元符号和逗号,因数据集无美元符号,转而尝试将reviews_per_month列的小数点替换为逗号(比如把0.20改成0,20),但运行代码后出现两个报错:

  • SyntaxError: EOL while scanning string literal
  • KeyError: '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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:05:42