2017-03-10 16 views
6

をintに文字列を変換:パンダは、私はID番号を持つ大規模なデータフレームを持っている

ID.head() 
Out[64]: 
0 4806105017087 
1 4806105017087 
2 4806105017087 
3 4901295030089 
4 4901295030089 

これらは現時点ではすべての文字列です。

ループを使用せずにintに変換します。この場合、私はID.astype(int)を使用します。

問題は、私の行の一部がintに変換できないダーティなデータを含んでいることです。私は安心してastype使用できるように、I(ループを使用せずに)出現のこれらのタイプを削除するにはどうすればよい

ID[154382] 
Out[58]: 'CN414149' 

?あなたはto_numericを機能させるパラメータerrors='coerce'を追加必要

+0

'NaN''にこれらの値を変換するために使用 'pd.to_numeric(DF [ 'ID']、エラー= '強制')これがdtypeの 'float'を生成することに注意してください。この質問は何度も尋ねられています – EdChum

+0

ありがとう!なぜあなたはコメントしていますか?あなたはそれに正しく答えた、そして最初に!とにかく、問題の説明が不完全であることが多いので、とにかくvmm – gmarais

+0

に感謝します。そのため、回答を投稿してから編集したり、詳細を尋ねたり、再編集したりする必要があります。また、この質問はシンプルだったので、私は偽者 – EdChum

答えて

17

ID = pd.to_numeric(ID, errors='coerce') 

IDは、列の場合:

df.ID = pd.to_numeric(df.ID, errors='coerce') 

が、数値以外はので、すべての値がfloatあり、NaNに変換されます。

intの場合は、NaNを値に変換する必要があります。 0、その後はintにキャスト:

df.ID = pd.to_numeric(df.ID, errors='coerce').fillna(0).astype(np.int64) 

サンプル:

df = pd.DataFrame({'ID':['4806105017087','4806105017087','CN414149']}) 
print (df) 
       ID 
0 4806105017087 
1 4806105017087 
2  CN414149 

print (pd.to_numeric(df.ID, errors='coerce')) 
0 4.806105e+12 
1 4.806105e+12 
2    NaN 
Name: ID, dtype: float64 

df.ID = pd.to_numeric(df.ID, errors='coerce').fillna(0).astype(np.int64) 
print (df) 
       ID 
0 4806105017087 
1 4806105017087 
2    0 
関連する問題