2016-09-26 6 views
1

をintに文字列からパンダ列を変換できません:がデータフレームで、以下の列がintに変換する必要が

dsAttendEnroll.District.head() 

0 DISTRICT 01 
1 DISTRICT 02 
2 DISTRICT 03 
3 DISTRICT 04 
4 DISTRICT 05 
Name: District, dtype: object 

astypeを使用すると、以下のエラーを与え、どのようにこれを行うことができますか?

dsAttendEnroll.District = dsAttendEnroll.District.map(lambda x: x[-2:]).astype(int) 

ValueError: invalid literal for long() with base 10: 'LS'

+4

あなたのデータに 'LS'で終わるものがあることを意味します... – acushner

+1

' LS'データで何をしたいかを決める必要があると思います。それを破棄するか、別の列に分割したいですか(下記のように)? 'LS'は有効か無効か? – dmn

+0

不正なデータを除外していただきありがとうございました。 –

答えて

2

あなたはパラメータerrors='coerce'があるto_numeric、とstr[1]することにより、第2のリストを選択するとsplitを使用することができます - それはNaNにない数値を変換します

print (df) 
     District 
0 DISTRICT 01 
1 DISTRICT 02 
2 DISTRICT 03 
3 DISTRICT 04 
4 DISTRICT 05 
5 DISTRICT LS 

print (df.District.str.split().str[1]) 
0 01 
1 02 
2 03 
3 04 
4 05 
5 LS 
Name: District, dtype: object 

print (pd.to_numeric(df.District.str.split().str[1], errors='coerce')) 
0 1.0 
1 2.0 
2 3.0 
3 4.0 
4 5.0 
5 NaN 
Name: District, dtype: float64 

スライス2最後の文字と別の解決策:

print (df.District.str[-2:]) 
0 01 
1 02 
2 03 
3 04 
4 05 
5 LS 
Name: District, dtype: object 

print (pd.to_numeric(df.District.str[-2:], errors='coerce')) 
0 1.0 
1 2.0 
2 3.0 
3 4.0 
4 5.0 
5 NaN 
Name: District, dtype: float64 
+0

別の解決策を追加します。確認してください。 – jezrael

2

あなたは試すことができます:

dsAttendEnroll.District=pd.to_numeric(dsAttendEnroll.District) 
dsAttendEnroll.District=dsAttendEnroll.District.astype(int) 

ドキュメントhereを見てください。

関連する問題