求助:pandas读取CSV时千分位分隔符导致数值转换错误
解决Pandas读取CSV时千位分隔符导致的数值解析错误
你遇到的核心问题是:CSV文件里用.作为千位分隔符(而非小数点),但pandas默认会把带.的内容当成浮点数处理,才出现了数值被错误缩小或保留为字符串的情况。下面给你两个实用的解决方法:
方案一:直接用thousands参数解析(推荐)
Pandas的read_csv函数专门提供了thousands参数来处理千位分隔符,刚好匹配你CSV里的.。设置后pandas会自动去掉这些分隔符,把数值转换成正确的整数类型:
import pandas as pd # 指定分隔符为';',千位分隔符为'.' data = pd.read_csv('C:/Users/user/Desktop/Test/my_file.csv', sep=';', thousands='.')
运行这段代码后,A列的376.362.691会被正确解析成376362691,和Excel里的数值完全一致。
方案二:先读为字符串再手动转换(兼容特殊场景)
如果你的CSV里存在同时包含千位分隔符和小数点的数值(比如1.234.567,89这类带小数的格式),可以先把目标列读取为字符串,再替换掉千位分隔符后转换类型:
import pandas as pd # 先将t、A列以字符串类型读取,避免自动解析错误 data = pd.read_csv('C:/Users/user/Desktop/Test/my_file.csv', sep=';', dtype={'t': str, 'A': str}) # 去掉所有的'.',然后转换为整数 data['t'] = data['t'].str.replace('.', '', regex=False).astype(int) data['A'] = data['A'].str.replace('.', '', regex=False).astype(int)
补充说明:为什么调整decimal参数没用?
你之前修改decimal参数是在调整小数点的符号,但你的问题根源是千位分隔符不匹配,所以这个参数自然解决不了问题。decimal是用来告诉pandas哪个符号代表小数点(比如欧洲地区常用','当小数点),而thousands才是专门处理千位分隔的参数。
内容的提问来源于stack exchange,提问作者may
相关产品推荐
相关产品推荐

