ValueError: Cannot mask with non-boolean array containing NA / NaN values

如果你遇到了 ValueError: Cannot mask with non-boolean array containing NA / NaN values 这个错误,这意味着你试图用一个包含 NA 或 NaN 值的非布尔数组来过滤你的 DataFrame。这通常发生在 .loc[] 或布尔索引操作中,如果生成的掩码(mask)数组中含有缺失值,Pandas 就无法正确地应用这个掩码。

要解决这个问题,你需要确保你的掩码数组是一个只包含 True 和 False 的布尔数组,并且不包含任何 NA 或 NaN 值。你可以通过填充缺失值或删除含有缺失值的行来解决这个问题。

以下是一些可能的解决方案

解决方案 1:填充缺失值

你可以使用 .fillna() 方法来填充掩码数组中的缺失值,例如用 False 填充

mask = df['column_name'].str.contains('R0900').fillna(False)  
filtered_df = df.loc[mask]

解决方案 2:删除含有缺失值的行

如果你不想保留含有缺失值的行,你可以在创建掩码之前先删除它们

df_no_na = df.dropna(subset=['column_name'])  
mask = df_no_na['column_name'].str.contains('R0900')  
filtered_df = df_no_na.loc[mask]

解决方案 3:在创建掩码时排除 NaN

你还可以使用 .notnull() 方法来确保只在非缺失值的行上应用掩码

mask = df['column_name'].notnull() & df['column_name'].str.contains('R0900')  
filtered_df = df.loc[mask]

这里,df['column_name'].notnull() 创建一个布尔数组,其中 True 表示对应行的 column_name 不是 NaN,然后通过逻辑与操作符 & 与 str.contains('R0900') 的结果组合,确保只有在 column_name 非空且包含字符串 'R0900' 的行才会被选中。

选择哪种解决方案取决于你的具体需求和你想要如何处理 DataFrame 中的缺失值。通常,填充缺失值或删除含有缺失值的行是最常见的做法。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值