2016-04-18 5 views
4

カラムに3種類の値、整数(12331)、整数( '345')または他の文字列( 'text')を持つDataFrameがあります。パンダのデータフレームに数値以外の文字列値を無視する

最後の種類の文字列を含むすべての行をデータフレームから削除し、最初の種類の文字列を整数に変換する方法はありますか?または、列を合計している場合に、型エラーの原因となる行を無視する少なくともいくつかの方法です。

このデータフレームは、かなり大きなCSVファイル(25 GB)を読み込んだものです。そのため、チャンクで読み込むときに役立つ解決策が必要です。

答えて

6

パンダにはこれらの種類の列を変換するためのツールがいくつかありますが、ニーズに合っていない可能性があります。 pd.to_numericはあなたのような混在した列を変換しますが、数字以外の文字列はNaNに変換します。つまり、floatカラムはNaNの値を持つことができるので、整数ではなくfloatカラムを取得します。それは通常はそれほど重要ではありませんが、意識するのは良いことです。

df = pd.DataFrame({'mixed_types': [12331, '345', 'text']}) 

pd.to_numeric(df['mixed_types'], errors='coerce') 
Out[7]: 
0 12331.0 
1  345.0 
2  NaN 
Name: mixed_types, dtype: float64 

あなたは、すべてのNaN行をドロップしたい場合は

# Replace the column with the converted values 
df['mixed_types'] = pd.to_numeric(df['mixed_types'], errors='coerce') 

# Drop NA values, listing the converted columns explicitly 
# so NA values in other columns aren't dropped 
df.dropna(subset = ['mixed_types']) 
Out[11]: 
    mixed_types 
0  12331.0 
1  345.0 
+0

読み込み後にNaNが作成されるため、na_values = 'NaN'に設定してdrop_naを実行すると、これらの値は削除されますか? – devil0150

+0

@ devil0150変換したら、 'dropna()'をやるのは難しくない、編集を参照してください – Marius

+0

'$ 1.00'通貨では機能しませんでした。 : – xtian

1

あなたはNaNであなたの数値以外の値を代入し、それをインクルード各列を適用するためにerrors=coercepd.to_numericを使用することができます。次に、dropnaまたはfillnaを好きなように使用できます。

df = pd.read_csv('file.csv') 
df = df.apply(pd.to_numeric, errors='coerce') 
df = df.dropna() 
0

あなたはdf._get_numeric_data()を直接使用できます。

関連する問題