我正在尝试将邮政编码为“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'
有没有一种无需所有这些步骤即可删除所有无效文字的有效方法?
请您参考如下方法:
首先,使用参数errors='coerce' 转换为数字,这样不能转换的将是NaN。然后,删除它们并将系列转换为整数。
df['ZIP'] = pd.to_numeric(df['ZIP'], errors='coerce')
df = df.dropna(subset=['ZIP'])
df['ZIP'] = df['ZIP'].astype('int')
