Saya memiliki DataFrame seperti ini:

students = {'ID': [2, 3, 5, 7, 11, 13], 
        'Name':['John','Jane','Sam','James','Stacy','Mary'],
        'Gender':['M','F','F','M','F','F'],
        'school_name':['College2','College2','College10','College2','College2','College2'],
        'grade':['9th','10th','9th','9th','8th','5th'],
        'math_score':[90,89,88,89,89,90],
        'art_score':[90,89,89,78,90,94]}
        
        students_df = pd.DataFrame(students)

Bisakah saya menggunakan metode loc pada student_df untuk memilih semua nilai matematika dan nilai seni dari kelas 9 di College2 dan menggantinya dengan NaN? Apakah ada cara bersih untuk melakukan ini tanpa memecah proses menjadi dua bagian: satu untuk sub-pengaturan dan yang lainnya untuk penggantian?

Saya mencoba memilih cara ini:

students_df.loc[(students_df['school_name'] == 'College2') & (students_df['grade'] == "9th"),['grade','school_name','math_score','art_score']]

Saya mengganti dengan cara ini:

students_df['math_score'] = np.where((students_df['school_name']=='College2') & (students_df['grade']=='9th'), np.NaN, students_df['math_score'])

Bisakah saya mencapai hal yang sama dengan cara yang jauh lebih bersih dan efisien menggunakan loc dan np.NaN?

2
aolayeye 12 Mei 2021, 10:34

1 menjawab

Jawaban Terbaik

Pilih kolom untuk mengganti nilai yang hilang terlebih dahulu dan atur NaN:

students_df.loc[(students_df['school_name'] == 'College2') & (students_df['grade'] == "9th"),['math_score','art_score']] = np.nan
print (students_df)
   ID   Name Gender school_name grade  math_score  art_score
0   2   John      M    College2   9th         NaN        NaN
1   3   Jane      F    College2  10th        89.0       89.0
2   5    Sam      F   College10   9th        88.0       89.0
3   7  James      M    College2   9th         NaN        NaN
4  11  Stacy      F    College2   8th        89.0       90.0
5  13   Mary      F    College2   5th        90.0       94.0
1
jezrael 12 Mei 2021, 07:41