我正在尝试将具有“对象”类型的邮政编码的列转换为“ int”
df['ZIP'] = df['ZIP'].astype(str).astype(int)
我的数据超过100000条记录,并且不断抛出带有该列中无效的不同文字的消息。我了解数据类型不匹配,并且转换失败。
ValueError: invalid literal for int() with base 10: ' '
Run Code Online (Sandbox Code Playgroud)
为了纠正上述错误,我用nan替换了“空行”,并使用以下代码删除了它们:
df['ZIP'] = df['ZIP'].replace('', np.nan)
df['ZIP'] = df.dropna(subset=['ZIP'])
Run Code Online (Sandbox Code Playgroud)
之后,我再次收到以下错误。
ValueError: invalid literal for int() with base 10: 'SAM'
Run Code Online (Sandbox Code Playgroud)
是否有一种无需所有这些步骤即可删除所有无效文字的有效方法?
首先,使用参数将其转换为数字,errors='coerce'以便不能进行转换的将为NaN。然后,将其删除并将Series转换为整数。
df['ZIP'] = pd.to_numeric(df['ZIP'], errors='coerce')
df = df.dropna(subset=['ZIP'])
df['ZIP'] = df['ZIP'].astype('int')
Run Code Online (Sandbox Code Playgroud)