脚本专栏 发布日期:2025/11/1 浏览次数:1
在 pandas 中提供了利用映射关系来实现某些操作的函数,具体如下:
在数据处理时,经常会遇到需要将数据结构中原来的元素根据实际需求替换成新元素的情况。要想用新元素替换原来元素,就需要定义一组映射关系。在映射关系中,将旧元素作为键,新元素作为值。
例如,创建字典 fruits 用于指明水果标识和水果名称的映射关系。
fruits={101:'orange',102:'apple',103:'banana'}
如要将用于存储水果标识、水果数量和单价的 DataFrame 对象中的水果标识替换成水果名称,就需要运用 replace() 函数,通过 fruits 映射关系来实现元素的替换。
replace() 函数的基本语法格式如下:
obj.replace(to_replace=None,value=None,inplace=False,limit=None,regex= False,method='pad')
函数中的参数说明如下:
【例 1】利用 replace() 函数和映射关系实现将水果数据框中水果标识替换成水果名称。
示例代码 test1.py 如下:
import numpy as np
import pandas as pd
#创建水果标识与水果名称的映射关系
fruits = {101:'orange',102:'apple',103:'banana'}
#创建水果数据框DataFrame
data = pd.DataFrame({'fru_No':[101,102,103] ,'fru_Num':[1000,2000,3000]
,'price':[3.56,4.2,2.5]})
#用映射替换fru_No列的元素
newDf = data.replace(fruits)
print(newDf)
#输出如下
fru_No fru_Num price
0 orange 1000 3.56
1 apple 2000 4.20
2 banana 3000 2.50
replace() 函数应用的示例代码 example1.py 如下:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
s = Series([-1000,-999,2,3,4,5,-2000])
#单数值替换
print(s.replace(-2000,np.nan))
0 -1000.0
1 -999.0
2 2.0
3 3.0
4 4.0
5 5.0
6 NaN
#将多个数值替换
print(s.replace([-1000,-999],0))
0 0
1 0
2 2
3 3
4 4
5 5
6 -2000
#不同的值进行不同的替换
print(s.replace([-1000,-999],[np.nan,0]))
0 NaN
1 0.0
2 2.0
3 3.0
4 4.0
5 5.0
6 -2000.0
#用字典方式进行不同的替换
print(s.replace({-1000:np.nan,-999:0,-2000:np.nan}))
0 NaN
1 0.0
2 2.0
3 3.0
4 4.0
5 5.0
6 NaN
在【例 1】中介绍了利用函数和映射来实现将水果标识替换成水果名称的方法。但是有时需要保留水果标识,将水果名称添加到数据集中。
那么,这时可利用 map() 函数,通过构建 fruits 映射关系来实现元素的添加。
map() 函数是作用于 Series 或 DataFrame 对象的一列,它接收一个函数或表示映射关系的字典作为参数,它的基本语法格式如下:
Series.map(arg,na_action=None)
函数中的参数说明如下:
【例 2】利用 map() 函数和映射关系实现将水果名称添加到水果数据框中。
示例代码 test2.py 如下:
import pandas as pd
#创建水果标识与水果名称的映射关系
fruits = {101:'orange',102:'apple',103:'banana'}
#创建水果数据框DataFrame
data = pd.DataFrame({'fru_No':[101,102,103],'fru_Num':[1000,2000,3000],'price':
[3.56,4.2,2.5]})
#用映射为data添加fru_name列元素
data['fru_name'] = data['fru_No'].map(fruits)
print(data)
fru_No fru_Num price fru_name
0 101 1000 3.56 orange
1 102 2000 4.20 apple
2 103 3000 2.50 banana
在数据处理中,有时需要使用映射关系转换轴标签。pandas 的 rename() 函数是以表示映射关系的字典对象作为参数,替换轴的索引标签。
rename() 函数的基本语法格式如下:
DataFrame.rename(mapper=None,index=None,columns=None,axis=None,copy=True, inplace=False,level=None) 或 Series.rename(index=None,**kwargs)
函数中的参数说明如下:
rename() 函数返回值是 DataFrame 或 Series。
【例 3】利用 rename() 函数和映射关系重命名水果数据框的行索引和列索引。
示例代码 test3.py 如下:
import pandas as pd
#创建行索引的映射关系
reindex = {0:'row1',1:'row2',2:'row3'}
#创建水果数据框DataFrame
data = pd.DataFrame({'fru_No':[101,102,103],'fru_Num':[1000,2000,3000],'price':
[3.56,4.2,2.5]})
fru_No fru_Num price
0 101 1000 3.56
1 102 2000 4.20
2 103 3000 2.50
#用映射重命名水果数据框的行索引,产生新DataFrame,但原数据不改变
newDf = data.rename(reindex)
print(newDf)
fru_No fru_Num price
row1 101 1000 3.56
row2 102 2000 4.20
row3 103 3000 2.50
#用映射重命名水果数据框的行索引,产生新DataFrame,但原数据改变
newDf = data.rename(reindex,inplace=True)
print(newDf) #newDf是None,data原数据改变
#创建列索引的映射关系
recolumns = {'fru_No':'col1','fru_Num':'col2','price':'col3'}
#用映射重命名水果数据框中的行索引和列索引
newDf = data.rename(index=reindex,columns=recolumns)
print(newDf)
col1 col2 col3
row1 101 1000 3.56
row2 102 2000 4.20
row3 103 3000 2.50
#用映射重命名水果数据框的单个行索引和单个列索引
newDf = data.rename(index={'row2':'s1'},columns={'fru_No':'111'})
print(newDf)
111 fru_Num price
row1 101 1000 3.56
s1 102 2000 4.20
row3 103 3000 2.50
注意:rename() 函数返回一个经过改动的新 DataFrame 对象,但原 DataFrame 对象仍保持不变,如果要改变调用函数的对象本身,可使用 inplace 选项,并将其值设置为 True。
以上就是详解pandas映射与数据转换的详细内容,更多关于pandas映射与数据转换的资料请关注其它相关文章!