Excel保存为CSV保留float类型及pandas读CSV字符串转float报错解决
报错原因
你的数值列(如Adj Close**)中包含千位分隔符,,例如示例中的1,758.70,pandas读取时会将这类带逗号的内容识别为字符串类型,直接调用astype(float)转换时会因为无法识别逗号而报错。
解决方案
方案1:读取CSV时直接处理(最优选择)
pd.read_csv自带thousands参数,指定千位分隔符为逗号后,读取过程中会自动移除逗号并将内容转换为数值类型,无需后续额外操作:
SP = pd.read_csv('S&P500 (5year).csv', thousands=',')
读取完成后所有带千位分隔符的数值列都会自动变为float类型,可直接调用pct_change()方法。
方案2:读取后手动转换
如果已经完成文件读取,不想重新加载,可以先移除字符串中的逗号再做类型转换:
# 单独转换Adj Close**列 SP['Adj Close**'] = SP['Adj Close**'].str.replace(',', '').astype(float) # 批量转换所有数值列 numeric_cols = ['Open', 'High', 'Low', 'Close*', 'Adj Close**', 'Volume'] for col in numeric_cols: SP[col] = SP[col].str.replace(',', '').astype(float)
Excel导出CSV的注意事项
你提到需要从Excel导出CSV并保留float类型,导出前先将Excel中数值列的「千位分隔符」显示格式关闭,导出的CSV就不会自带逗号分隔符,后续pandas读取时会自动识别为float类型,无需额外处理。
内容的提问来源于stack exchange,提问作者Mike Forrester
相关产品推荐
相关产品推荐

