使用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]