Pandas将字符串转换为int

时间:2017-03-10 13:38:56

标签: python pandas

我有一个ID号为的大型数据框:

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

目前这些都是字符串。

我想在不使用循环的情况下转换为int - 为此我使用ID.astype(int)

问题是我的一些行包含无法转换为int的脏数据,例如。

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

我如何(不使用循环)删除这些类型的事件,以便我可以放心使用astype

1 个答案:

答案 0 :(得分:43)

您需要将参数errors='coerce'添加到功能to_numeric

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

如果ID是列:

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

但非数字转换为NaN,因此所有值均为float

对于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