我有一个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
?
答案 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