我正在尝试将邮政编码为'object'类型的列转换为'int'
df['ZIP'] = df['ZIP'].astype(str).astype(int)
我的数据超过100000条记录,并且不断抛出包含该列无效的不同文字的邮件。我理解数据类型不匹配,转换失败。
ValueError: invalid literal for int() with base 10: ' '
为了纠正上述错误,我用nan替换了“空行”,并使用下面的代码删除它们:
df['ZIP'] = df['ZIP'].replace('', np.nan)
df['ZIP'] = df.dropna(subset=['ZIP'])
之后我再次收到以下错误。
ValueError: invalid literal for int() with base 10: 'SAM'
是否有一种有效的方法可以在没有所有这些步骤的情况下删除所有无效文字?
答案 0 :(得分:4)
首先,使用参数errors='coerce'
转换为数字,以便无法转换的是NaN。然后,删除它们并将Series转换为整数。
df['ZIP'] = pd.to_numeric(df['ZIP'], errors='coerce')
df = df.dropna(subset=['ZIP'])
df['ZIP'] = df['ZIP'].astype('int')