Pandas read_csv无法解析带前导空格的" FALSE"字符串报错如何解决
问题根因
你的配置不生效存在两个核心原因:
false_values参数配置的匹配值和实际CSV内容大小写不匹配:你配置的是全大写的" FALSE",但报错日志里实际读取到的是首字母大写的" False",无法命中匹配规则- 字段前的前导空格没有被默认处理,导致字符串既无法被识别为布尔值,也无法被
pd.to_numeric直接解析
解决方案
方案1:修改read_csv参数从读入阶段解决(推荐)
新增skipinitialspace参数自动忽略所有字段的前导空格,同时补全true_values、false_values的大小写匹配规则即可:
data = pd.read_csv( os.path.join(path, working_dir, staticDataFileName), encoding_errors='ignore', skipinitialspace=True, # 自动去除每个字段前的所有前导空格 true_values=["TRUE", "True", "true"], # 覆盖所有大小写写法的真值 false_values=["FALSE", "False", "false"] # 覆盖所有大小写写法的假值 )
该方案不需要修改后续的pd.to_numeric逻辑,读入后对应列会直接变成布尔类型或者数值类型,可直接转换成功。
方案2:在数值转换前预处理字符串
如果不想修改读入逻辑,可在执行pd.to_numeric前先对字段做空格清除和布尔值替换:
cols=[i for i in data.columns if i not in ["Time"]] for col in cols: # 先清除字符串前后所有空格,再把布尔字符串替换为数值 data[col] = data[col].str.strip().replace({"True": 1, "False": 0, "TRUE":1, "FALSE":0}) data[col] = pd.to_numeric(data[col])
内容的提问来源于stack exchange,提问作者Mike H
相关产品推荐
相关产品推荐

