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

相关问题