使用pd.read_csv读取美联储SP500数据时遇小数点类型转换错误求助
解决pandas读取CSV时的数值转换错误
首先,咱们得明确问题根源:你看到的.不是小数点,而是CSV里用来标记缺失值的符号。pandas默认只把空字符串、NaN、null这类内容识别为缺失值,单独的.不在默认列表里,所以它会把这个符号当成普通字符串,尝试转成float时自然就报错了。
最快的解决方案:用na_values指定缺失值标记
直接在pd.read_csv()里加上na_values='.'参数,告诉pandas把单独的.当成缺失值处理,这样就能正常解析带小数点的价格数值了:
import pandas as pd df = pd.read_csv('sp500.csv', na_values='.')
进阶:指定列数据类型(可选)
如果你想明确指定价格列的类型,可以搭配dtype参数一起用,确保万无一失:
df = pd.read_csv('sp500.csv', na_values='.', dtype={'价格': float})
备选方案:先加载为字符串再转换
如果上面的方法没生效(比如CSV里还有其他特殊格式),可以先把所有数据按字符串加载,手动替换.为缺失值后再转换类型:
df = pd.read_csv('sp500.csv', dtype=str) # 替换单独的'.'为pandas缺失值,再转成float df['价格'] = df['价格'].replace('.', pd.NA).astype(float)
你之前处理的CSV没问题,是因为那些文件里的小数点是数值的一部分(比如3456.78),pandas能正确识别这种格式;但这次的.是单独存在的,属于缺失值标记,不在默认识别范围内,才会触发错误。
内容的提问来源于stack exchange,提问作者Christopher Pfeifer
相关产品推荐
相关产品推荐

