字符串上的Pandas列过滤会产生意外结果

时间:2017-08-28 10:13:16

标签: python pandas

我有一个列ClientAccount的数据框,其中包含我要过滤掉的大量测试数据数据。

要查找包含测试客户端的行数,请执行以下操作:

test_users = order_data[order_data['ClientAccount'].str.contains("DEMO|test")==True]

返回Name: ClientAccount, Length: 2493

很酷,所以原来的71.458行中有2.493行。

然后,为了获得不是这些2.493行的所有内容,我不应该只是反过来吗?

order_data = order_data[order_data['ClientAccount'].str.contains("DEMO|test")==False]

虽然这给了48.046行,但这有什么意义呢?我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为有NaNNone个值,因此可以在str.contains中使用参数na。同样,对于反转布尔掩码(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:无法使用包含NA / NaN值的向量进行索引