为什么新建pandas DataFrame时提示False/True列不在索引中?
问题原因
- 报错核心是列名
False和True的实际类型为布尔值,而非你取列时使用的字符串类型。 - 生成透视表时,
columns参数指定的alert_value字段本身存储的是布尔类型的True/False,因此透视表生成的列名会继承布尔类型,info输出时仅会展示列名内容不会标注类型,才会让你误以为是字符串列名。 - 你用字符串
'False'、'True'匹配布尔类型的列名,二者完全不相等,自然触发KeyError。
你可以执行以下代码验证列名类型:
print(finalDF.columns)
输出结果中可以看到False和True没有引号包裹,属于布尔值,其他字符串类型的列名会有引号包裹。
解决方法
有两种可行方案,按需选择即可:
方案1:直接用布尔值取列
直接去掉False和True外层的引号,用布尔值匹配列名:
displayDF = finalDF[[False, True, 'RULE ID', 'RULE NAME']]
方案2:统一列名为字符串类型(更推荐,避免后续其他操作踩坑)
先把所有列名转换为字符串格式,再按原写法取数:
# 转换所有列名格式为字符串 finalDF.columns = finalDF.columns.astype(str) # 原写法即可正常执行 displayDF = finalDF[['False','True','RULE ID','RULE NAME']]
内容的提问来源于stack exchange,提问作者Trey
相关产品推荐
相关产品推荐

