pandas 根据条件替换空值

new9mtju  于 2023-04-04  发布在  其他
关注(0)|答案(1)|浏览(110)

所以我在Kaggle上处理一个名为netflix-movies-and-tv-shows的数据集。我目前正在执行一些数据清理任务,并希望找到dataframe中的null值。
假设我有一个看起来像这样的dataframe:

import pandas as pd
import numpy as np

all_data = {
    "person_id": [7782, 28692],
    "id": ["tm82169", "tm17823"],
    "name": ["John G.Avildsen", "Randal Kleiser"],
    "character": [np.nan, np.nan],
    "role": ["DIRECTOR", "ACTOR"]
}
index_labels = [1,2]
df = pd.DataFrame(all_data,index=index_labels)
print(df)

现在我想用类似这样的内容替换“character”列中的null值:如果角色是“演员”,那么character = 'figurant'如果角色是“导演”,那么character = '导演'
我找到了一些解决方案:

mask = (all_data['role'] == 'ACTOR')
all_data.loc[all_data['character'].isnull() & mask, 'character'] = 'figurant'
all_data.head(250)

或:

all_data['character'] = all_data['character'].fillna('figurant').where(all_data['role'] == "ACTOR")
all_data.head(250)

然而,我努力使代码在这两种情况下都能工作。
我还尝试了带有if-else条件的for循环:

for i in all_data['role']:
    if i == "ACTOR":
        all_data['character'].fillna('figurant')
    elif i == "DIRECTOR":
        all_data['character'].fillna('director') 
all_data.head(50)

但这只适用于“演员”。那些“导演”的空值仍然为空。
我只是Python世界的初学者,如果这个问题听起来很基础,请原谅我。
谢谢你们!

4dbbbstv

4dbbbstv1#

您可以使用Mapdict来填充缺少的值:

dmap = {'DIRECTOR': 'director', 'ACTOR': 'figurant'}
df['character'] = df['character'].fillna(df['role'].map(dmap))

输出:

>>> df
   person_id       id             name character      role
1       7782  tm82169  John G.Avildsen  director  DIRECTOR
2      28692  tm17823   Randal Kleiser  figurant     ACTOR

相关问题