Python 将字符串转换为int

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号的大数据框:

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