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
相关产品推荐
相关产品推荐

