吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2282|回复: 9
收起左侧

[求助] pandas 的修改某值,总有提示信息,已解决

[复制链接]
ymhld 发表于 2020-3-18 21:25
本帖最后由 ymhld 于 2020-4-5 12:52 编辑

[Python] 纯文本查看 复制代码
import os
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') 

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



test.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- ... -view-versus-a-copy
  data1.loc[:,'数学'][data1['数学']<=95]="良"

总有这样的提示信息,应该怎么写才能对呢,
解决方案:
data1.loc[data1['数学']<=95,'数学'] = "良"


高级解决方案
[Python] 纯文本查看 复制代码
chengji = [['优', 95, 100, 99], ['良', 98, 99, 100], ['可', 95, 59, 88], ['可', 98, 95, 87], ['劣', 85,61, 85],
           ['优', 94, 93, 91]]
data = pd.DataFrame(chengji, columns=['语文', '类别', '数学', '政治'])

data1 = data.copy(deep=True)
print(data1) 
data1['数学'] = data1['数学'].apply(lambda x: "优+" if x >= 100 
									else "优" if 100>x >= 95 
									else "良"  if 95>x >= 85 
									else "及格"  if 85>x >= 60 
									else "不及格"  if 60>x 
									else x)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

V风习习 发表于 2020-3-18 21:58
本帖最后由 V风习习 于 2020-3-18 22:04 编辑

望采纳
[Python] 纯文本查看 复制代码
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)
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)

image.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ymhld + 1 + 1 热心回复!

查看全部评分

 楼主| ymhld 发表于 2020-3-18 22:08
V风习习 发表于 2020-3-18 21:58
望采纳
[mw_shl_code=python,true]import pandas as pd

谢谢回答,我想问一下,我的那个怎么会有警告提示?应该怎么写更规范,您这方法不错,对于apply,isinstance,还得进一步理解,能具体解释一下吗?
V风习习 发表于 2020-3-18 22:14
ymhld 发表于 2020-3-18 22:08
谢谢回答,我想问一下,我的那个怎么会有警告提示?应该怎么写更规范,您这方法不错,对于apply,isinsta ...

你看看loc取出来是什么
image.png
 楼主| ymhld 发表于 2020-3-18 22:18
V风习习 发表于 2020-3-18 22:14
你看看loc取出来是什么

但是是改成良了,我也奇怪,怎么运行的呢
 楼主| ymhld 发表于 2020-3-18 22:25
V风习习 发表于 2020-3-18 22:14
你看看loc取出来是什么

我知道了,series表示出来的,正好是第二个[]的符合了,取出了相应的位置,再改成良
ciker_li 发表于 2020-3-18 23:42
data1.loc[data1['数学']<=95,'数学'] = "良"

这样改了后就没有报错了

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ymhld + 1 + 1 热心回复!

查看全部评分

 楼主| ymhld 发表于 2020-3-19 08:40
ciker_li 发表于 2020-3-18 23:42
data1.loc[data1['数学']

这是单个设置的最快办法,能不能设置多条件呢?
比如=100,优+,96-99,优,类似沙发层的结果
ciker_li 发表于 2020-3-19 09:56
ymhld 发表于 2020-3-19 08:40
这是单个设置的最快办法,能不能设置多条件呢?
比如=100,优+,96-99,优,类似沙发层的结果

这我就不会了
 楼主| ymhld 发表于 2020-3-19 09:57

十分感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 18:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表