多列索引DataFrame中转换0和1为bool并保留pd.NA
解决方案
要将DataFrame中的0/1转换为布尔类型(False/True)并保留pd.NA,核心是利用pandas的Nullable Boolean类型(boolean dtype),它原生支持缺失值pd.NA。以下是几种简洁高效的实现方式:
方法1:直接使用astype('boolean')
这是最直接的方式,pandas会自动将0映射为False、1映射为True,同时保留原有的pd.NA:
df_bool = df.astype('boolean') print(df_bool)
输出结果:
level1 a b level2 NaN NaN level3 c c c c c c c c 0 True <NA> False <NA> False True <NA> <NA> 1 <NA> False True <NA> <NA> <NA> False False 2 False True True True False <NA> <NA> False
方法2:自定义映射(更灵活)
如果需要更精细的控制(比如后续扩展其他值的转换),可以用replace配合类型转换:
df_bool = df.replace({0: False, 1: True}).astype('boolean')
注意事项
- 确保你的pandas版本≥1.0.0,因为Nullable Boolean类型是从这个版本开始引入的。
- 不要使用numpy的
booldtype(即astype(bool)),它会把pd.NA强制转换为True,丢失缺失值信息。
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

