ymhld 发表于 2020-3-18 21:25

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

本帖最后由 ymhld 于 2020-4-5 12:52 编辑

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(,"优")
print(data1)
print("-"*50,'replace方法,替换小于95')

data1=data.copy(deep=True)
data1.loc[:,'数学']<=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[:,'数学']<=95]="良"

总有这样的提示信息,应该怎么写才能对呢,
解决方案:

data1.loc<=95,'数学'] = "良"


高级解决方案
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 编辑

望采纳
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)

ymhld 发表于 2020-3-18 22:08

V风习习 发表于 2020-3-18 21:58
望采纳
import pandas as pd



谢谢回答,我想问一下,我的那个怎么会有警告提示?应该怎么写更规范,您这方法不错,对于apply,isinstance,还得进一步理解,能具体解释一下吗?

V风习习 发表于 2020-3-18 22:14

ymhld 发表于 2020-3-18 22:08
谢谢回答,我想问一下,我的那个怎么会有警告提示?应该怎么写更规范,您这方法不错,对于apply,isinsta ...

你看看loc取出来是什么

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<=95,'数学'] = "良"

这样改了后就没有报错了

ymhld 发表于 2020-3-19 08:40

ciker_li 发表于 2020-3-18 23:42
data1.loc

这是单个设置的最快办法,能不能设置多条件呢?
比如=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

ciker_li 发表于 2020-3-19 09:56
这我就不会了

十分感谢
页: [1]
查看完整版本: pandas 的修改某值,总有提示信息,已解决