如何根据特定条件替换Pandas数据框架中特定列的特定值?

3
我有一个Pandas数据帧,其中包含学生和他们获得的百分比分数。有些学生的分数显示为大于100%。显然,这些值是错误的,我想将所有大于100%的百分比值替换为NaN。
我已经尝试了一些代码,但没有完全得到我想要的结果。
import numpy as np
import pandas as pd

new_DF = pd.DataFrame({'Student' : ['S1', 'S2', 'S3', 'S4', 'S5'],
                       'Percentages' : [85, 70, 101, 55, 120]})

#  Percentages  Student
#0          85       S1
#1          70       S2
#2         101       S3
#3          55       S4
#4         120       S5


new_DF[(new_DF.iloc[:, 0] > 100)] = np.NaN

#  Percentages  Student
#0        85.0       S1
#1        70.0       S2
#2         NaN      NaN
#3        55.0       S4
#4         NaN      NaN

从代码中可以看出它在某种程度上可以工作,但实际上会将百分比大于100的那一行中的所有值替换为NaN。我只想将Percentages列中大于100的值替换为NaN。有没有办法做到这一点?

4个回答

3

尝试使用np.where来解决问题:

new_DF.Percentages=np.where(new_DF.Percentages.gt(100),np.nan,new_DF.Percentages)

或者
new_DF.loc[new_DF.Percentages.gt(100),'Percentages']=np.nan

print(new_DF)

  Student  Percentages
0      S1         85.0
1      S2         70.0
2      S3          NaN
3      S4         55.0
4      S5          NaN

@JohnE 是的,也取决于 df 的大小吧?对于更大的 dfs,np.where 不应该更快吗?BDW 现在已取消注释。 :) 谢谢 - anky
是的,我认为你是对的。通常np.where非常快。 - JohnE

2
最初的回答
此外,
df.Percentages = df.Percentages.apply(lambda x: np.nan if x>100 else x)

最初的回答
或者,
df.Percentages = df.Percentages.where(df.Percentages<100, np.nan)

1
这也可以运行。 :) 但是尽量避免使用apply,它很慢。 - anky
1
同意 @anky_91 的观点,尽可能避免在不必要的情况下使用 .apply - Erfan

1
你可以使用 .loc
new_DF.loc[new_DF['Percentages']>100, 'Percentages'] = np.NaN

输出:

  Student  Percentages
0      S1         85.0
1      S2         70.0
2      S3          NaN
3      S4         55.0
4      S5          NaN

这个在我的解决方案中已经有了(请查看注释部分),不确定这有什么不同。 - anky
现在明白了 :) - anky

0
import numpy as np
import pandas as pd

new_DF = pd.DataFrame({'Student' : ['S1', 'S2', 'S3', 'S4', 'S5'],
                      'Percentages' : [85, 70, 101, 55, 120]})
#print(new_DF['Student'])
index=-1
for i in new_DF['Percentages']:
    index+=1
    if i > 100:
        new_DF['Percentages'][index] = "nan"




print(new_DF)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接