2016-09-26 114 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

可以使用split通過str[1]to_numeric,哪裏是參數errors='coerce'選擇第二清單 - 這不是數字值轉換爲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