为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2021-09-11 10:34:20
对于数据框,我用一系列值替换了列中的一组项目,如下所示: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
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我看到您想以某种强加的顺序执行类别编码。我会建议使用pd.Categorical带ordered=True:


df = pd.DataFrame({

    'Borough': ['QUEENS', 'BRONX', 'MANHATTAN', 'BROOKLYN', 'INVALID']})

df


     Borough

0     QUEENS

1      BRONX

2  MANHATTAN

3   BROOKLYN

4    INVALID


keys = ['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX']

df['borough_num'] = pd.Categorical(

    df['Borough'], categories=keys, ordered=True).codes+1


df


     Borough  borough_num

0     QUEENS            3

1      BRONX            5

2  MANHATTAN            1

3   BROOKLYN            2

4    INVALID            0

pd.Categorical 将无效字符串返回为 -1:


pd.Categorical(

         df['Borough'], categories=keys, ordered=True).codes      

array([ 2,  4,  0,  1, -1], dtype=int8)

这应该是很多比使用更快的replace,无论如何,但作为参考,你可以这样做与replace和词典:


from collections import defaultdict


d = defaultdict(int)

d.update(dict(zip(keys, range(len(keys)))))

df['borough_num'] = df['Borough'].map(d)


df


     Borough  borough_num

0     QUEENS            2

1      BRONX            4

2  MANHATTAN            0

3   BROOKLYN            1

4    INVALID            0


查看完整回答
反对 回复 2021-09-11
?
互换的青春

TA贡献1797条经验 获得超6个赞

要将所有其他值替换为 0,您可以执行以下操作:


# create maps

new_values = ['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX']

maps = dict(zip(new_values, [1]*len(new_values)))


# map the values

df['borough_num'] = df['Borough'].apply(lambda x: maps.get(x, 0))


查看完整回答
反对 回复 2021-09-11
?
哔哔one

TA贡献1854条经验 获得超8个赞

冷使用mapwith 的数据fillna,所有不在 map 中的值dict都会返回NaN,那么我们只需fillna


df.Borough.map(dict(zip(['QUEENS', 'BRONX'],[1,2]))).fillna(0).astype(int)

0    1

1    2

2    2

3    0

Name: Borough, dtype: int32


查看完整回答
反对 回复 2021-09-11
  • 3 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信