python pandas替换某值

python pandas替换某值

import pandas as pd    


chengji=[['优',95,100,99],['良',98,99,100],['可',95,98,88],['可',98,95,87],['劣',85,96,85],['优',94,93,91]]
data=pd.DataFrame(chengji,columns=['语文','类别','数学','政治'])

data1=data.copy(deep=True)
print("-"*50,'replace方法,只替换100') 
data1['数学'] = data1['数学'].replace(100,"优+")
print(data1)
print("-"*50,'replace方法,替换96-100') 
data1['数学'] = data1['数学'].replace([100,99,98,97,96],"优")
print(data1)
print("-"*50,'replace方法,替换小于95') 

print("-"*50,'批量修改类型') 
data1 = data.copy(deep=True)
data1['数学'] = data1['数学'].apply(lambda x: "优+" if x == 100 else x)
data1['数学'] = data1['数学'].apply(lambda x: "优" if isinstance(x, (int, float)) and x > 95 else x)
data1['数学'] = data1['数学'].apply(lambda x: "良" if isinstance(x, (int, float)) and x <= 95 else x)
print(data1)

print("-"*50,'映射字典方法')
food = {100:'优',99:'优-',98:'良',97:'可'}
data1=data.copy(deep=True) 
data1['数学'] = data1['数学'].replace(food)
print(data1)
print(data)
print("-"*50,'map方法')
data1=data 
data1['数学'] = data1['数学'].map(food)
print(data1)

-------------------------------------------------- replace方法,只替换100
语文 类别 数学 政治
0 优 95 优+ 99
1 良 98 99 100
2 可 95 98 88
3 可 98 95 87
4 劣 85 96 85
5 优 94 93 91
-------------------------------------------------- replace方法,替换96-100
语文 类别 数学 政治
0 优 95 优+ 99
1 良 98 优 100
2 可 95 优 88
3 可 98 95 87
4 劣 85 优 85
5 优 94 93 91
-------------------------------------------------- replace方法,替换小于95
映射替换pandas.py:18: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
data1.loc[:,‘数学’][data1[‘数学’]<=95]=“良”
<class ‘pandas.core.series.Series’> 0 100
1 99
2 98
3 良
4 96
5 良
Name: 数学, dtype: object
语文 类别 数学 政治
0 优 95 100 99
1 良 98 99 100
2 可 95 98 88
3 可 98 良 87
4 劣 85 96 85
5 优 94 良 91
-------------------------------------------------- 替换小于95
语文 类别 数学 政治
0 优 95 优+ 99
1 良 98 优 100
2 可 95 优 88
3 可 98 良 87
4 劣 85 优 85
5 优 94 良 91
-------------------------------------------------- 映射字典方法
语文 类别 数学 政治
0 优 95 优 99
1 良 98 优- 100
2 可 95 良 88
3 可 98 95 87
4 劣 85 96 85
5 优 94 93 91
语文 类别 数学 政治
0 优 95 100 99
1 良 98 99 100
2 可 95 98 88
3 可 98 95 87
4 劣 85 96 85
5 优 94 93 91
-------------------------------------------------- map方法
语文 类别 数学 政治
0 优 95 优 99
1 良 98 优- 100
2 可 95 良 88
3 可 98 NaN 87
4 劣 85 NaN 85
5 优 94 NaN 91

可以看出,对于多对一,一对一的映射替换,用replace和字典的方法比较好,用map时,不存在映射时,会把没映射到的替换成NAN,看各自的用途吧

其中这个会出错,可以用下面的进行更改

data1=data.copy(deep=True)
data1.loc[:,'数学'][data1['数学']<=95]="良"
print(data1)

#上例的正确写法
data1=data.copy(deep=True)
data1.loc[data1['数学']<=95,'数学']="良"
print(data1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值