Series.map(dict, na_action)
dict: 根据字典的键值对,替换Series里面的值,如果字典中,没有找到Series中对应的值,则赋值为NaN
na_action:如果传入ignore,则跳过对空值的操作
#coding=utf-8
import pandas as pd
import numpy as np
df=pd.read_csv("map.csv")
print(df)
'''
height weight smoker gender age color
0 178 52 False - 89 black
1 182 55 False 女 81 white
2 169 64 False 女 26 yellow
3 189 73 False 男 63 yellow
4 177 80 False 女 75 white
5 168 53 False 男 70 yellow
...
'''
#将gender性别中的男替换为1,女替换为0
print(df["gender"].map({"男":1,"女":0}))
print(df.gender.map({"男":1,"女":0}))
'''
由结果得知:第一行的gender的-被替换为NaN
0 NaN
1 0.0
2 0.0
3 1.0
4 0.0
5 1.0
...
'''
#na_action传入ignore跳过对空值的处理
se=pd.Series(['cat','dog',np.nan,'rabbit'])
print(se)
'''
看结果,该Series有个空值
0 cat
1 dog
2 NaN
3 rabbit
dtype: object
'''
print(se.map('I am {}'.format))
'''
看结果,对空值nan并未作处理
0 I am cat
1 I am dog
2 I am nan
3 I am rabbit
dtype: object
'''
print(se.map('I am {}'.format,na_action="ignore"))
'''
看结果,直接对空值忽略,不作处理
dtype: object
0 I am cat
1 I am dog
2 NaN
3 I am rabbit
dtype: object
'''
#replace替换:和map的区别在于:replace只替换匹配到的值,未匹配到的值不作处理
df=pd.DataFrame(
{"名称":["产品1","产品2","产品3","产品4","产品5"],
"金额":[0,0.48,"F",0.74,0],
"合计":[0.37,0.28,"C",0.57,0.06]}
)
print(df)
'''
合计 名称 金额
0 0.37 产品1 0
1 0.28 产品2 0.48
2 C 产品3 F
3 0.57 产品4 0.74
4 0.06 产品5 0
'''
#指定列替换,指定"金额"列里的"F"替换为0
print(df["金额"].replace({"F":0}))
'''
0 0.00
1 0.48
2 0.00
3 0.74
4 0.00
Name: 金额, dtype: float64
'''
#指定列替换,指定"金额"列里的"F"替换为0,且对原df对象生效
df["金额"].replace({"F":0},inplace=True)
print(df)
'''
合计 名称 金额
0 0.37 产品1 0.00
1 0.28 产品2 0.48
2 C 产品3 0.00
3 0.57 产品4 0.74
4 0.06 产品5 0.00
'''
#不针对某列,针对所有列的替换
print(df.replace("产品1","product"))
'''
合计 名称 金额
0 0.37 product 0.00
1 0.28 产品2 0.48
2 C 产品3 0.00
3 0.57 产品4 0.74
4 0.06 产品5 0.00
'''
网友评论