2017-08-28 10 views
1

フィルタリングするテストデータデータが多いClientAccountのデータフレームがあります。 文字列のPandas列のフィルタリングで予期しない結果が発生する

は、私は次の操作を行い、テストクライアントが含まれている行数を確認するには:

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

71.458元の行のうち、クールName: ClientAccount, Length: 2493

ので、2.493行を返します。

次に、これらの2.493行でないすべてのものを取得するには、私はちょうど反対をしないでください?

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

これは48.046行になりますが、それはどのように意味がありますか?私は何が欠けていますか?

+1

いくつかのNaN値は可能ですか? – jezrael

+0

ああ、そうだった。 dfの 'isnull()。sum()'は20.919を返します。 – Khaine775

答えて

1

NaNまたはNoneという値があると思いますので、使用パラメータnastr.containsです。また、ブールマスクを反転するために(True + FalseSeries~を使用します。

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

関連する問題