Python中pandas含逗号小数和无效值的object列如何转换为float类型
方案1:读取数据后处理
执行以下链式操作即可完成清洗、格式转换:
# 步骤1:清洗无效值+替换小数分隔符 df['amount'] = df['amount'].str.strip()\ .replace(r'^-$', '', regex=True)\ .str.replace(',', '.') # 步骤2:转换为float类型,无效值自动转为NaN df['amount'] = pd.to_numeric(df['amount'], errors='coerce')
如需删除存在无效值的行,转换完成后执行:
df = df.dropna(subset=['amount'])
操作说明
str.strip():清除字段值首尾的空格,你报错的' - '类内容会被处理为'-'- 正则替换
replace(r'^-$', '', regex=True):匹配仅含单个'-'的无效值,替换为空字符串 str.replace(',', '.'):将逗号格式的小数分隔符替换为点号,适配float类型格式要求pd.to_numeric的errors='coerce'参数:所有无法转换为数值的内容会自动设为NaN,无需自行判断非数值内容
方案2:读取CSV时直接处理(更简便)
读取文件时直接配置参数,一步得到格式正确的字段:
df = pd.read_csv( 'name', sep=';', encoding='unicode_escape', decimal=',', # 指定逗号为小数分隔符 na_values=[' - ', '-', ' - '] # 指定需要识别为空值的无效内容 )
该方案读取完成后amount列直接为float类型,指定的无效值会自动转为NaN。
内容的提问来源于stack exchange,提问作者nonganalytics
相关产品推荐
相关产品推荐

