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

Pandas无法将逗号替换为小数点问题求助

解决CSV加载后数值中逗号未替换的问题

问题原因

你用df.replace(',', '.')未生效,是因为Pandas的replace默认匹配整个单元格值,只有当单元格内容完全等于,时才会替换。而像0,20这种包含逗号的字符串,需要开启正则匹配来替换子串。另外,若加载后这些值仍为字符串类型,说明decimal=','参数未正确将其识别为数值(可能是列中存在非数值内容,或CSV格式存在异常)。

解决方案

1. 直接替换所有单元格中的逗号(推荐)

使用regex=True参数开启正则匹配,批量替换所有子串中的逗号为点:

# 替换所有列中的逗号为小数点
df = df.replace(',', '.', regex=True)

# 可选:将目标列转换为数值类型
# 替换后如果需要转为float,指定列名即可
target_cols = ['列名1', '列名2']  # 替换成你的实际列名
df[target_cols] = df[target_cols].astype(float)

2. 读取CSV时直接处理

如果确定某些列应该是数值类型但被识别为字符串,可以用converters参数自定义转换函数:

import pandas as pd

def convert_decimal(x):
    try:
        # 替换逗号为点后转为float
        return float(x.replace(',', '.'))
    except ValueError:
        # 非数值内容保持原样
        return x

# 读取时指定需要转换的列
df = pd.read_csv(
    '/content/drive/MyDrive/data.csv',
    sep=',',
    converters={'目标列名': convert_decimal}  # 替换成实际列名,可指定多个
)

3. 先检查数据类型

先确认带逗号的列是否为字符串类型(object):

print(df.dtypes)

如果列类型是object,再执行上面的替换操作;如果是数值类型,说明逗号已经被识别为小数点(只是显示问题,可通过df.info()查看实际存储值)。


内容的提问来源于stack exchange,提问作者Python_Newbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:45:37