pandas数据映射,更改列名,批量映射替换某列数据replace、map、apply、rename对比

关于数据关系映射的三个方法

首先,无论那一种方法,都建议先将映射关系写出来,然后使用方法时,可以直接调写好的关系表。

gys_name = {
    '深圳市腾讯计算机系统有限公司':'腾讯',
    '阿里巴巴(中国)有限公司':'淘宝',
    '北京百度网讯科技有限公司':'百度'
}
change_status = {
    '2':'已确认变更',
    '4':'待确认变更',
    '1':'无变更'
}
order_status = {
    1:'草稿',
    2:'待答交',
    6:'变更中',
    7:'已确认'
}
col_name = {
    '变更状态 1无变更 2已确认并更 3未确认变更 4待确认变更':'变更状态',
    '订单状态 1草稿2待答交3挂起4答交差异5退回6变更中7已确认8已完成':'订单状态'
}

第一种:使用replace()(推荐)

这个replace还有很多其他用法,根据条件进行映射。比如正则、字典、列表等

同时,还支持下面的一句话把所有的都替换了,并且,对于不符合的规则的,他不会去动。

df.replace({'供应商名称':gys_name,
            '变更状态':change_status,
            '订单状态':order_status}, inplace=True)

第二种:使用map()、apply()

这个函数,可以和lambda函数一块搭配使用效果惊人。

但是,map函数对于本文所示的映射,会对不符合规则的改写成NaN

df['供应商名称'] = df['供应商名称'].map(gys_name)
df['变更状态'] = df['变更状态'].map(change_status)
df['订单状态'] = df['订单状态'].map(order_status)

第三种:对于列名/行名索引进行更改rename()

默认变更列名,如果行名的话加上axis=0

df.rename(columns=col_name, inplace=True)

你可能感兴趣的:(数据分析,Python,pandas)