使用Pandas创建DataFrame时遇'None of ['b_id'] are in the columns'错误求助
问题排查与解决
错误原因
你的代码里pd.read_csv指定了分隔符sep='|',但实际数据是用多个空格分隔的,这导致Pandas无法正确识别列,把整行内容当成了单一列,自然找不到b_id这个列名,从而抛出错误。
修复方案
把分隔符改成匹配多个空格的规则,或者直接启用Pandas的空白分隔参数,两种方法任选其一:
方法1:使用正则匹配多个空格
import pandas as pd from io import StringIO # 建议把字符串变量和DataFrame变量名区分开,避免混淆 df_str = """ b_id Rejected Remediation user 366 NaN 38 days 22:05:06.807430 Test 367 0 days 00:00:05.285239 NaN Test 368 NaN NaN Test 371 NaN NaN Test 378 NaN 451 days 14:59:28.830482 Test 384 28 days 21:05:16.141263 0 days 00:00:44.999706 Test """ # 用\s+匹配一个或多个空格作为分隔符 df = pd.read_csv(StringIO(df_str.strip()), sep='\s+') df.set_index("b_id", inplace=True)
方法2:启用空白分隔参数
import pandas as pd from io import StringIO df_str = """ b_id Rejected Remediation user 366 NaN 38 days 22:05:06.807430 Test 367 0 days 00:00:05.285239 NaN Test 368 NaN NaN Test 371 NaN NaN Test 378 NaN 451 days 14:59:28.830482 Test 384 28 days 21:05:16.141263 0 days 00:00:44.999706 Test """ # delim_whitespace=True 等价于 sep='\s+',专门处理空白分隔的文本 df = pd.read_csv(StringIO(df_str.strip()), delim_whitespace=True) df.set_index("b_id", inplace=True)
额外提示
- 尽量不要用同一个变量名(比如你原来的
df)同时存储字符串和DataFrame,容易造成代码混淆。 - 如果你的数据未来出现带空格的字段,这种方法可能失效,但当前数据的字段都是无空格的,完全适用。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

