如何遍历df中的行,并通过映射永久更改列的值?

2024-06-16 13:48:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想有条件地更新数据帧列中的值。你知道吗

我正在处理一家冰淇淋店及其面临的投诉。问题和这些问题的总数存储在字典中:

myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}

我还有一个更大的数据框,里面有冰淇淋店一个月的数据。你知道吗

date| day | 'Rude Staff'| 'Poor Hygiene' | 'Out of Stock'<br>
01/06/19 | Sat | ? | ? | ? 
09/06/19 | Sun | ? | ? | ? 
15/09/21 | Fri | ? | ? | ? 

我想把myDict的值映射到更大的df,替换问号如下:

date | day | 'Rude Staff'| 'Poor Hygiene' | 'Out of Stock'<br>
01/06/19 | Sat | 12 | 4 | 3
09/06/19 | Sun | 12 | 4 | 3
15/09/21 | Fri | 12 | 4 | 3

我试过迭代df中的每一行,例如,如果“Rude Staff”的值与我字典中的任何键匹配,则替换“?”带着那把钥匙的价值。你知道吗

for index, row in df.iterrows():
    for i in range(0, len(myDict)-1):
        if row['Rude Staff'] == myDict[i]:
            row['Rude Staff'].replace("?", myDict[myDict[i]])

这不起作用,因为iterrows不会永久编辑行的值。你知道吗

如何根据df中的“Rude Staff”是否与字典中的“Rude Staff”匹配,将dictionary键的值映射到df中的列?你知道吗


Tags: of数据brdfdate字典stockout
3条回答

您可以在dict上使用简单的迭代:

for key, value in myDict.items():
    df[key] = value

如果dict键与df.columns同步,则可以将^{}regex=True一起使用:

myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}
df.replace('\?',myDict,regex=True)

        date    day  Rude Staff  Poor Hygiene  Out of Stock
0  01/06/19    Sat           12             4             3
1  09/06/19    Sun           12             4             3
2  15/09/21    Fri           12             4             3

假设dict中的键和DataFrame中的键相同,您可以在列上迭代,为包含“?”的行分配值。你知道吗

演示:

t = '''date| day | 'Rude Staff'| 'Poor Hygiene' | 'Out of Stock'
20/05/19 | Xxx | 1 | 2 | 3 
01/06/19 | Sat | ? | ? | ? 
09/06/19 | Sun | ? | ? | ? 
15/09/21 | Fri | ? | ? | ? '''

df = pd.read_csv(io.StringIO(t.replace("'",'')), sep='\\s*\|\\s*')

myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}

print(df)

for k,v in myDict.items():
    df.loc[df[k]=='?', k] = v

print(df)

显示:

       date  day Rude Staff Poor Hygiene Out of Stock
0  20/05/19  Xxx          1            2            3
1  01/06/19  Sat          ?            ?            ?
2  09/06/19  Sun          ?            ?            ?
3  15/09/21  Fri          ?            ?            ?
       date  day Rude Staff Poor Hygiene Out of Stock
0  20/05/19  Xxx          1            2            3
1  01/06/19  Sat         12            4            3
2  09/06/19  Sun         12            4            3
3  15/09/21  Fri         12            4            3

显示只替换?值。你知道吗

相关问题 更多 >