Pandas 标签编码列,带有无效行值的默认标签

对于数据框,我用一系列值替换了列中的一组项目,如下所示:

df['borough_num'] = df['Borough'].replace(regex=['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX'], value=[1, 2, 3, 4,5])

我想用值 0 替换 'Borough' 中所有其余元素的问题,我也需要使用正则表达式,因为有些看起来像数据,例如。07 BRONX,我也需要把它换成 5 而不是 0


月关宝盒
浏览 213回答 3
3回答

饮歌长啸

我看到您想以某种强加的顺序执行类别编码。我会建议使用pd.Categorical带ordered=True:df = pd.DataFrame({    'Borough': ['QUEENS', 'BRONX', 'MANHATTAN', 'BROOKLYN', 'INVALID']})df     Borough0     QUEENS1      BRONX2  MANHATTAN3   BROOKLYN4    INVALIDkeys = ['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX']df['borough_num'] = pd.Categorical(    df['Borough'], categories=keys, ordered=True).codes+1df     Borough  borough_num0     QUEENS            31      BRONX            52  MANHATTAN            13   BROOKLYN            24    INVALID            0pd.Categorical 将无效字符串返回为 -1:pd.Categorical(         df['Borough'], categories=keys, ordered=True).codes      array([ 2,  4,  0,  1, -1], dtype=int8)这应该是很多比使用更快的replace,无论如何,但作为参考,你可以这样做与replace和词典:from collections import defaultdictd = defaultdict(int)d.update(dict(zip(keys, range(len(keys)))))df['borough_num'] = df['Borough'].map(d)df     Borough  borough_num0     QUEENS            21      BRONX            42  MANHATTAN            03   BROOKLYN            14    INVALID            0

互换的青春

要将所有其他值替换为 0,您可以执行以下操作:# create mapsnew_values = ['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX']maps = dict(zip(new_values, [1]*len(new_values)))# map the valuesdf['borough_num'] = df['Borough'].apply(lambda x: maps.get(x, 0))

哔哔one

冷使用mapwith 的数据fillna,所有不在 map 中的值dict都会返回NaN,那么我们只需fillnadf.Borough.map(dict(zip(['QUEENS', 'BRONX'],[1,2]))).fillna(0).astype(int)0    11    22    23    0Name: Borough, dtype: int32
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python