【发布时间】:2020-05-15 09:34:26
【问题描述】:
我提取了一系列布尔值,我想在 Pandas 中从中过滤一个数据框,但它没有返回任何结果。
数据框
Account mphone rphone BPHONE
0 14999201 3931812 8014059 9992222
1 12980801 4444444 3932929 4279999
2 9999999 3279999 4419999 3938888
这是系列:
df['BPHONE'].str.startswith(tuple(combined_list))
0 False
1 True
2 False
Name: BPHONE, dtype: bool
df['rphone'].str.startswith(tuple(combined_list))
0 True
1 False
2 True
Name: rphone, dtype: bool
现在下面,当我尝试过滤时,我得到空结果:
df[(df['BPHONE'].str.startswith(tuple(combined_list))) & (df['rphone'].str.startswith(tuple(combined_list)))]
Account mphone rphone BPHONE
最后,当我只使用一列时,它似乎是按行而不是按列匹配和过滤。这里有关于如何纠正这个问题的建议吗?
df[(df['BPHONE'].str.startswith(tuple(combined_list)))]
Account mphone rphone BPHONE
1 12980801 4444444 3932929 4279999
我认为这应该只是沿列轴而不是行轴填充 BPHONE。我怎样才能以这种方式过滤?
想要的输出如下:
Account mphone rphone BPHONE
14999201 3931812 8014059 np.nan
12980801 4444444 np.nan 4279999
99999999 3279999 4419999 np.nan
为了解释这一点,rphone 显示 True、False、True,因此只有 True 数字应该显示。在 False 下它不应显示,或显示为 NAN。
【问题讨论】:
-
你得到的是合法的。看看
df['BPHONE'].str.contains和df['rphone'].str.contains的结果——你看到两个结果都为真的行吗? -
布尔掩码对行进行操作。您不会得到任何结果,因为
True False True和False True False是互斥的。您说您正在尝试对列进行操作,您能否提供您首选输出的示例以制作minimal reproducible example,以便我们更好地了解您的问题? -
您希望得到什么?它似乎与您共享的代码的逻辑不同。
-
我添加了预期的内容。谢谢!