pandas数据处理之数据转换(映射map、替换replace、重命名rename)

简介: 我们在数据处理的过程中经常碰到需要对数据进行转换的工作,比如将原来数据里的字典值根据字典转义成有意义的说明,将某些数据转换成其他的数据,将空值转换成其他值,将数据字段名进行重命名等。pandas作为数据处理分析的利器当然为上述的这些数据转换提供了便捷的方法。我们可以利用pandas提供的映射、替换、重命名等操作方便的进行相应的数据转换操作。本文通过实例重点介绍pandas常用的数据转换工具映射map()、替换replace()、重命名rename()

我们在数据处理的过程中经常碰到需要对数据进行转换的工作,比如将原来数据里的字典值根据字典转义成有意义的说明,将某些数据转换成其他的数据,将空值转换成其他值,将数据字段名进行重命名等。pandas作为数据处理分析的利器当然为上述的这些数据转换提供了便捷的方法。我们可以利用pandas提供的映射、替换、重命名等操作方便的进行相应的数据转换操作。

本文通过实例重点介绍pandas常用的数据转换工具映射map()、替换replace()、重命名rename()

映射:map()函数 对数据集Serice中的元素根据映射关系进行映射(作用于Serice或DataFrame对象的一列)
替换:replace()函数 替换元素 (作用于DataFrame)
重命名:rename()函数 替换索引 (作用于index或columns)

一、映射 map()

在平时数据处理的过程中常常会碰到,某个字段(数据列)是数字表示的要根据映射表转换成有意思的字符。如性别在数据集里存的是1和2分别表示“男”和“女”,如何将数据集中“性别”列的1和2替换成“男”和“女”如何做?绝对不能用for循环一个个去替换。pandas也好、Numpy也好,都是针对数据集处理的,我们应该抛弃以前针对单个数据处理的思维去拥抱针对数据集来编程。使用pandas的map()方法,最少仅需一行代码就可以解决。
map() 函数是做用于 Series 或 DataFrame 对象的一列,它接收一个函数或表示映射关系的字典做为参数,它的基本语法格式以下:

Series.map(arg,na_action=None)

函数中的参数说明以下:

  • arg:接收 function、dict 或 Series,表示映射关系;
  • na_action:类似R中的na.action,取值为None或ingore,用于控制遇到缺失值的处理方式,设置为ingore时串行运算过程中将忽略Nan值原样返回。

下面通过实例来说明pandas的map()的使用,演示的student数据集如下:

import numpy as np
import pandas as pd
df = pd.read_excel('D:\\Python\\study\\pythontest\\pandastest\\数据集\\student.xlsx')
df

student数据集

1、通过数据字典映射

map()方法接受数据字典参数,通过数据字典将数据进行映射。如我们需要将“性别”列的1和2替换成“男”和“女”,定义一个数据字典{1:'男',2:'女'},将1映射成“男”,将2映射成“女”。

gender_map={
   
   1:'男',2:'女'}
df['性别']=df['性别'].map(gender_map)
df

数据字典映射
可以看到通过map()将需要转换的列的值进行的转换,具体的转换过程如下图所示:
map转换过程

2、lambda函数映射

map()方法还接受lambda函数的方式进行值的映射,如我们现在要把数学分数为95分以上的映射数学等级为“优秀”,95及以下的映射为“良好”。可以通过lambda函数进行映射。

df['数学等级']=df['5-数学'].map(lambda x:'优秀' if x>95 else '良好')
df

lambda函数映射

3、通用函数映射

map()方法可以接收自定义通用的函数进行值的映射,如我们现在要把语文分数为95以上的映射为语文等级为“优秀”,95及以下的映射为“良好”,也可以通过自定义函数来实现映射。
先定义一个函数score(x)用于接收需要映射的值。

def score(x):
    score_class='良好'
    if x>95:
        score_class='优秀'
    return score_class

df['语文等级']=df['4-语文'].map(score)
df

函数映射

二、替换 replace()

如果要对全DataFrame数据集中的数据进行某种替换,map()可能需要对数据集中的每个列都进行map()操作才可以,但是通过pandas的替换方法replace可以一次性替换掉DataFrame中所有的数据。如:我们现在要将数据集中所有的“良好”替换成“良”,所有的“优秀”替换成“优”
可以直接通过 df.replace(['优秀','良好'],['优','良']) 一句代码搞定。
替换

以前文章中介绍了处理缺失值用fillna的方式来填充缺失值,用replace则提供了一种更加简单、灵活的处理缺失值或异常值的方式。
如在数据集中有一个数据列“是否接种”,这里的值有“已”、“是”、“否”、NaN,实际是在收集统计表格的时候大家填的数据不一致,不标准。现在需要将“已”的全部改成“是”,NaN没有填的改成“否”

df.replace(['已',np.nan],['是','否'])

填充缺失值

三、重命名 rename()

在数据处理的过程有时候需要对列索引进行重命名,一个典型的例子就是对于数据的检索或其他操作df[column]对于任意列名均有效,但是df.column只在列名是有效的Python变量名时才有效。
我们在检索英语大于95分的数据时可以用df[df['6-英语']>95]
英语大于95分的数据

但是用df.query('6-英语 >95') 就会报列名没有定义的错,因为'6-英语'列名不是有效的Python变量名。
报列名没有定义的错

这时候就需要将列名重命名为有效的Python变量名,有效的Python变量名应该是只能_,数字,字母组成,不可以是空格或者特殊字符(!@#$%^&*~),不能是数字开头,不能有中文。我们将“6-英语”的列名重命名为“english”。注意带上inplace=True参数用于更新作用于本数据集,而不是返回一个新的数据集。

df.rename(columns={
   
   '6-英语':'english'},inplace=True)
df.query('english > 95')

重命名
可以看到“6-英语”列名改成了“english”,并且df.query('english > 95')不报错,可以正常检索出数据了。
更多的,如果要重命名多个列,可以传入一个需要重命名的多个字典值,进行多个列的重命名。

df[['1-学号','2-姓名','3-年龄']].rename(columns={
   
   '1-学号':'ID','2-姓名':'name','3-年龄':'age'})

多个列重命名

如果需要重命名行索引,可以通过df.rename(index={'原索引':'重命名索引'})的方式进行重命名。

至此,本文通过几个实例介绍了pandas常用的数据转换工具映射map()、替换replace()、重命名rename()

数据集及源代码见:https://github.com/xiejava1018/pandastest.git


作者博客:http://xiejava.ishareread.com/

目录
相关文章
|
4月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
378 0
|
4月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
575 0
|
6月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
528 0
|
8月前
|
运维 数据挖掘 数据处理
Pandas时间数据处理:从基础到进阶的实战指南
Pandas时间数据处理涵盖了从基础到高级的全面功能。其核心由Timestamp、DatetimeIndex、Period和Timedelta四个类构建,支持精准的时间点与区间操作。内容包括时间数据生成(字符串解析与序列生成)、时间索引与切片、高级运算(偏移重采样与窗口计算)、时区处理、周期性数据分析及实战案例(如智能电表数据)。此外,还涉及性能优化技巧和未来展望,帮助用户高效处理时间序列数据并应用于预测分析等场景。
378 1
|
8月前
|
传感器 安全 数据处理
Pandas时间数据处理:从基础到进阶的实战指南
本文深入讲解Pandas时间数据处理技巧,从时间对象转换到高性能计算全面覆盖。通过真实案例拆解,掌握Timestamp与Period的核心概念、时间序列生成、重采样方法及窗口函数应用。同时剖析时区处理、性能优化策略及常见陷阱解决方案,并展望Pandas 2.0的时间处理新特性。内容强调“时间索引优先”原则,助你高效分析股票K线、用户行为等时间序列数据。
270 0
|
12月前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:交互式数据探索
Pandas 是数据分析中常用的数据处理库,提供了强大的数据结构和操作功能。本文从基础到高级,逐步介绍 Pandas 中交互式数据探索的常见问题及解决方案,涵盖数据读取、检查、清洗、预处理、聚合分组和可视化等内容。通过实例代码,帮助用户解决文件路径错误、编码问题、数据类型不一致、缺失值处理等挑战,提升数据分析效率。
277 32
|
12月前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
331 31
|
12月前
|
存储 安全 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数据驱动的时代,数据安全和隐私保护至关重要。本文探讨了使用Pandas进行数据分析时如何确保数据的安全性和隐私性,涵盖法律法规要求、用户信任和商业价值等方面。通过加密、脱敏、访问控制和日志审计等技术手段,结合常见问题及解决方案,帮助读者在实际项目中有效保护数据。
431 29
|
存储 安全 数据处理
Pandas高级数据处理:数据加密与解密
本文介绍如何使用Pandas结合加密库(如`cryptography`)实现数据加密与解密,确保敏感信息的安全。涵盖对称和非对称加密算法、常见问题及解决方案,包括密钥管理、性能优化、字符编码和数据完整性验证。通过示例代码展示具体操作,并提供常见报错的解决方法。
236 24
|
12月前
|
消息中间件 数据挖掘 数据处理
Pandas高级数据处理:数据流式计算
在大数据时代,Pandas作为Python强大的数据分析库,在处理结构化数据方面表现出色。然而,面对海量数据时,如何实现高效的流式计算成为关键。本文探讨了Pandas在流式计算中的常见问题与挑战,如内存限制、性能瓶颈和数据一致性,并提供了详细的解决方案,包括使用`chunksize`分批读取、向量化操作及`dask`库等方法,帮助读者更好地应对大规模数据处理需求。
281 17