2017-04-16 20 views
1

私は、いくつかのファンキーなデータエントリ(別名など)のためにオブジェクト型のデータを含むいくつかの列を持つデータフレームを持っています。pandasデータフレーム列を数値に変換するより良い方法

私はオブジェクト列を識別して、これを行うことによって、これを修正することができました

obj_cols = df.loc[:, df.dtypes == object] 
conv_cols = obj_cols.convert_objects(convert_numeric='force') 

これは正常に動作し、私は私が必要とする回帰分析を実行することができますが、このエラーを生成します。

FutureWarning: convert_objects is deprecated. 

エラーを回避するためにこれを行うより良い方法はありますか?私もラムダ関数を構築しようとしましたが、うまくいきませんでした。

+0

astype(int)またはpd.to_numeric – Vaishali

答えて

0

Convert_objectsは非推奨です。代わりにこれを使用してください。 パラメータerrors = 'coerce'を追加して、不正な非数値をNaNに変換できます。

conv_cols = obj_cols.apply(pd.to_numeric, errors = 'coerce') 

この機能は、DataFrame全体に適用されます。数値タイプに変換可能な列は変換されますが、(たとえば数字以外の文字列や日付などの)列には残りません。

+0

を使用できます:値エラー:( '文字列を解析できません。 ..) – Sveinn

+0

Plは編集を参照 – Vaishali

+0

私はそれを以前に試みました。 'TypeError:argはリスト、タプル、1次元配列、またはSeries'でなければなりません。 – Sveinn

0

あなたがサンプル・データ・フレームがある場合:

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 'f', 'Mar': 140}, 
    {'account': 'Alpha Co', 'Jan': 'e', 'Feb': 210, 'Mar': 215}, 
    {'account': 'Blue Inc', 'Jan': 50, 'Feb': 90, 'Mar': 'g' }] 
df = pd.DataFrame(sales) 

を、あなたは数値でなければなりません列内の文字列を取り除きたい、あなたはpd.to_numeric

cols = ['Jan', 'Feb', 'Mar'] 
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce', axis=1) 
でこれを行うことができます

あなたの新しいデータフレームは、「変な」データの代わりにNaNを持つでしょう

関連する問題