熊猫:在将对象转换为int的同时删除列中的无效文字

Hac*_*rds 1 python pandas

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

是否有一种无需所有这些步骤即可删除所有无效文字的有效方法?

ayh*_*han 5

首先,使用参数将其转换为数字,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)