两种思路排查UserWarning: Boolean Series key will be reindexed to match DataFrame index

使用dataframe筛选可能会遇到提示

UserWarning: Boolean Series key will be reindexed to match DataFrame index.

根据笔者的总结,这种情况出现是因为用完整的dataframe的逻辑符去筛选已经筛选过一遍的dataframe(有点绕),导致出现了错误提示。

经笔者总结,排查这一问题有两种思路。

思路一:是否大意了,没有全部更换变量名

df_a = df[(~df[0]>1)|(~df[1]>3)]
df_a = df_a[(~df[2].str.contains('A'))&(~df[3].str.contains('B'))]

上面两行代码先对df筛选得到df_a,再对df_a做筛选;

而第二行代码右边,虽然中括号最外面是df_a,但里面由于不注意,仍然用了df,里外的dataframe不一致,即用完整的dataframe的逻辑符去筛选已经筛选过一遍的dataframe,导致出现错误提示。

思路二:把筛选条件分别用()括号括起来再用“&”、“|”连接,或者干脆分开写

df_a = df[df[0] > 1][df[2]>3]

上面的代码把两个条件用中括号不加运算符直接放在一起,实际上出现了和上面一样的情况。

因此可以改为:

df_a = df[(df[0] > 1)&(df[2]>3)]

或者分步写:

df_a = df[df[0] > 1]
df_a = df_a[df_a[2]>3]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值