2017-05-23 9 views
3

私はこの投稿をチェックしました:finding non-numeric rows in dataframe in pandas? しかし、実際には私の質問に答えていません。列内で数値以外の行を取得するpandas python

私のサンプルデータ:

N-D num unit 
0 Q1 -1.48 UD 
1 Q2 1.70 UD 
2 Q3 -6.18 UD 
3 Q4 0.25 UD 
4 Q5 sum(d) UD 
5 Q6 0.25 UD 

私が非数値です列「NUM」の行のみをフィルタリングしたい:

import pandas as pd 


d = { 
'unit': ['UD', 'UD', 'UD', 'UD', 'UD','UD'], 
'N-D': [ 'Q1', 'Q2', 'Q3', 'Q4','Q5','Q6'], 
'num' : [ -1.48, 1.7, -6.18, 0.25, 'sum(d)', 0.25] 

} 
df = pd.DataFrame(d) 

それはこのようになります。列 'num'の数値以外の値を含む行のみすべての列を欲しいです。この解決策は見つからないか、フィルター番号は文字列として保存された::のようなto_numeric + isnull
注によって作成されたマスクで

nonnumeric=df[~df.applymap(np.isreal).all(1)] #didn't work, it pulled out everything, besides i want the condition to check only column 'num'. 

nonnumeric=df['num'][~df.applymap(np.isreal).all(1)] #didn't work, it pulled out all the rows for column 'num' only. 

答えて

1

使用boolean indexing

N-D num unit 
4 Q5 sum(d) UD 

私の試み:

は出力を希望します'1'または '22'

print (pd.to_numeric(df['num'], errors='coerce')) 
0 -1.48 
1 1.70 
2 -6.18 
3 0.25 
4  NaN 
5 0.25 
Name: num, dtype: float64 

print (pd.to_numeric(df['num'], errors='coerce').isnull()) 
0 False 
1 False 
2 False 
3 False 
4  True 
5 False 
Name: num, dtype: bool 

print (df[pd.to_numeric(df['num'], errors='coerce').isnull()]) 
    N-D  num unit 
4 Q5 sum(d) UD 
apply

別の解決策:

print (df[df['num'].apply(lambda x: isinstance(x, str))]) 
    N-D  num unit 
4 Q5 sum(d) UD 
1

私は

df = df[df['num'].apply(lambda x: type(x) == str)] 

を使用して、今DFが

これらは文字列である、あなたは正規表現の一致に基づいてフィルタリングすることができると仮定すると、
N-D  num unit 
4 Q5 sum(d) UD 
2

です浮動小数点数の

df[~df.num.str.match('^\-?(\d*\.?\d+|\d+\.?\d*)$')] 

    N-D  num unit 
4 Q5 sum(d) UD 
関連する問題