我有一个数据框,其中有一列ClientAccount
,其中包含大量我想要过滤掉的测试数据。
要查找包含测试客户端的行数,我执行以下操作:
test_users = order_data[order_data['ClientAccount'].str.contains("DEMO|test")==True]
返回名称:ClientAccount,长度:2493
很酷,71.458 原始行中有 2.493 行。
那么为了获取 2.493 行之外的所有内容,我不应该做相反的事情吗?
order_data = order_data[order_data['ClientAccount'].str.contains("DEMO|test")==False]
虽然这给出了 48.046 行,但这有什么意义呢?我错过了什么?
最佳答案
我认为有 NaN
或 None
值,因此可以在 str.contains
中使用参数 na
。同样对于反转 bool 掩码(True
+ False
Series
),请使用~
:
mask = order_data['ClientAccount'].str.contains("DEMO|test", na=False)
test_users1 = order_data[mask]
test_users2 = order_data[~mask]
<小时/>
示例:
order_data = pd.DataFrame({'ClientAccount':['DEMO ss','test f','dfd', None, np.nan, 'test']})
print (order_data)
ClientAccount
0 DEMO ss
1 test f
2 dfd
3 None
4 NaN
5 test
mask = order_data['ClientAccount'].str.contains("DEMO|test", na=False)
test_users1 = order_data[mask]
test_users2 = order_data[~mask]
print (test_users1)
ClientAccount
0 DEMO ss
1 test f
5 test
print (test_users2)
ClientAccount
2 dfd
3 None
4 NaN
如果没有参数,我会收到错误:
mask = order_data['ClientAccount'].str.contains("DEMO|test")
ValueError: cannot index with vector containing NA / NaN values
关于python - Pandas 对字符串的列过滤给出了意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45916652/