2017-08-13 7 views
2

フロートdtypeカラムの文字列値を含むデータフレームからローを削除したいとします。たとえば、金額フィールドがある場合、金額フィールドに値 "NA"を含むデータフレーム内のすべての行を削除します。カラムにPandasの文字列値が含まれている場合は、データフレームから値を削除してください

これまでのところ、私は次のことを試してみた -

to_drop = ['NA'] 
data = data[~data['gross'].isin(to_drop)] 

data = data[data.gross.str != 'NA'] 

私は "パンダにnp.object_ DTYPEを使用して文字列値を持つアクセサの.strのみ使用" を取得。

これを行う正しい方法は何ですか?

答えて

2

NA値(NaN)が欠落している場合は、チェックNaNのために指定した列とnotnulldropna必要があります。

data = pd.DataFrame({'gross':[np.nan,3,5], 
        'a':[2,3,4]}) 

print (data) 
    a gross 
0 2 NaN 
1 3 3.0 
2 4 5.0 

data1 = data[data.gross.notnull()] 
print (data1) 
    a gross 
1 3 3.0 
2 4 5.0 

data1 = data.dropna(subset=['gross']) 
print (data1) 
    a gross 
1 3 3.0 
2 4 5.0 

または混合値であれば - 文字列と数値は、最初にすべての値をキャストしますstrまたはvaluesによって作成されたnumpy配列を比較してください:

data = pd.DataFrame({'gross':['NA',3,5,'NA'], 
        'a':[2,3,4,8]}) 

print (data) 
    a gross 
0 2 NA 
1 3  3 
2 4  5 
3 8 NA 

data2 = data[data.gross.astype(str) != 'NA'] 
print (data2) 
    a gross 
1 3  3 
2 4  5 

data2 = data[data.gross.values != 'NA'] 
print (data2) 
    a gross 
1 3  3 
2 4  5 
0

IIUC:

data['gross'] = data.gross.replace('NA',np.nan) 
data = data.dropna() 

または

data[~data.gross.replace('NA',np.nan).isnull()] 

これらの行を削除するdropna軸= 1を使用し、次いでNaNを持つ文字列 'NA' を交換してください。

関連する問題