如何在Pandas中正确加载使用逗号作为小数分隔符的数据?
解决Pandas加载逗号作为小数分隔符的Excel数据问题
你已经尝试用decimal=","参数来处理Excel里的逗号小数分隔符,但从输出看Valor_aprovado列好像还是没被正确识别为数值类型?别着急,这里有几个可靠的解决办法:
方法1:读取后用pd.to_numeric转换目标列
很多时候,Excel里的数值会被存储为文本格式,这时候即使设置了decimal参数,pandas也没法直接把它识别为数值。这种情况下,我们可以先完整加载数据,再单独转换Valor_aprovado列:
import pandas as pd # 先正常加载Excel数据 ano_2016_exec = pd.read_excel('emendas/emendas_executadas_autores_2016.xls', sheet_name='Sheet1') # 将Valor_aprovado转换为数值类型,指定逗号为小数分隔符 ano_2016_exec['Valor_aprovado'] = pd.to_numeric( ano_2016_exec['Valor_aprovado'], decimal=',', errors='coerce' # 可选:把无法转换的异常值设为NaN,避免报错 ) # 验证转换结果 print(ano_2016_exec['Valor_aprovado'].dtype) ano_2016_exec.info()
方法2:读取时用converters参数自定义转换
如果你想在读取数据的阶段就完成格式转换,可以用converters参数给Valor_aprovado列指定一个自定义转换函数:
import pandas as pd def parse_decimal(val): # 处理字符串格式的数值 if isinstance(val, str): # 替换逗号为小数点,再转为浮点数 return float(val.replace(',', '.')) # 如果已经是数值类型,直接返回 return val # 读取Excel时应用转换器 ano_2016_exec = pd.read_excel( 'emendas/emendas_executadas_autores_2016.xls', sheet_name='Sheet1', converters={'Valor_aprovado': parse_decimal} ) # 检查列类型和数据情况 ano_2016_exec.info()
额外排查提示
如果上面的方法都没生效,建议先检查你的Excel文件:
- 确认
Valor_aprovado列的单元格格式是数值格式,而非文本格式。如果是文本,先在Excel里把格式改成数值(确保小数分隔符设置为逗号)再重新读取。 - 检查是否有单元格包含特殊字符(比如空格、换行符),可以在转换前先清理字符串:
ano_2016_exec['Valor_aprovado'] = ano_2016_exec['Valor_aprovado'].astype(str).str.strip()
内容的提问来源于stack exchange,提问作者Reinaldo Chaves
相关产品推荐
相关产品推荐

