Python 将字符串转换为int
我有一个带有ID号的大数据框:Python 将字符串转换为int,python,pandas,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' 如何(在不使用循环的情
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
。您需要添加参数errors='concurve'
,以实现以下功能:
如果ID
为列:
df.ID = pd.to_numeric(df.ID, errors='coerce')
但非数值转换为NaN
,因此所有值都是浮点值
对于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
编辑:如果使用熊猫0.25+则可能使用:
使用pd.to_numeric(df['ID'],errors='concurve')
将这些值转换为NaN
,注意这将生成一个float
的数据类型,这个问题已经被问了无数次了,非常感谢!为什么你只是在评论;你答对了,首先!无论如何,谢谢你,因为问题描述往往不完整,所以它会浪费时间发布答案,然后不得不编辑、询问更多信息、重新编辑等。此外,这个问题似乎很简单,所以评论比真人回答要快,而且我正试图找到一个重复的答案:讽刺的是,这是目前谷歌搜索这个问题的最高结果。
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
df.ID = pd.to_numeric(df.ID, errors='coerce').astype('Int64')
print (df)
ID
0 4806105017087
1 4806105017087
2 NaN