Как заменить Определенные значения определенного столбца в Pandas Dataframe на основе определенного условия? - PullRequest
3 голосов
/ 23 марта 2019

У меня есть датафрейм 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 на NaN, где оно больше 100. Есть ли способ сделать это?

Ответы [ 4 ]

3 голосов
/ 23 марта 2019

Попробуйте и используйте 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
2 голосов
/ 23 марта 2019

Также

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 голос
/ 23 марта 2019

Вы можете использовать .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
0 голосов
/ 23 марта 2019
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...