【问题标题】:Pandas convert string to int熊猫将字符串转换为整数
【发布时间】:2017-07-31 21:05:28
【问题描述】:

我有一个带有 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

【问题讨论】:

  • 使用pd.to_numeric(df['ID'], errors='coerce') 将这些值转换为NaN,注意这将产生float 的dtype,这个问题已经被问过无数次了
  • 非常感谢!你为什么只评论;你回答正确,首先!无论如何,谢谢vm
  • 因为问题描述通常不完整,所以它浪费时间发布答案,然后不得不编辑、询问更多信息、重新编辑等。而且这个问题看起来很简单,所以评论比肉体更快一个答案,除了我试图找到一个骗子
  • 具有讽刺意味的是,这是目前谷歌搜索该问题的最高结果。

标签: python pandas


【解决方案1】:

您需要将参数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

编辑:如果使用 pandas 0.25+,则可以使用 integer_na

df.ID = pd.to_numeric(df.ID, errors='coerce').astype('Int64')
print (df)
              ID
0  4806105017087
1  4806105017087
2            NaN

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多