我正在尝试将邮政编码为"对象"类型的列转换为"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')