首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何迭代df中的行,并通过映射永久更改列的值?

如何迭代df中的行,并通过映射永久更改列的值?
EN

Stack Overflow用户
提问于 2019-07-01 17:38:41
回答 3查看 234关注 0票数 0

我想有条件地更新我的dataframe列中的值。

我正在处理一家冰激凌店,以及它面临的投诉。问题和这些问题的总数存储在字典中:

代码语言:javascript
复制
myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}

我还有一个更大的df,它包含了冰淇淋店一个月的数据。

代码语言:javascript
复制
date| day | 'Rude Staff'| 'Poor Hygiene' | 'Out of Stock'<br>
01/06/19 | Sat | ? | ? | ? 
09/06/19 | Sun | ? | ? | ? 
15/09/21 | Fri | ? | ? | ? 

我希望将myDict的值映射到更大的df,将问号替换为如下所示:

代码语言:javascript
复制
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中的每一行,例如,如果‘row’的值与我的字典中的任何键匹配,则替换'?‘使用该键的值。

代码语言:javascript
复制
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‘是否与我的字典中的'Rude’匹配,将我的字典键的值映射到df中的列?

EN

回答 3

Stack Overflow用户

发布于 2019-07-01 17:50:35

你可以在你的字典上使用一个简单的迭代:

代码语言:javascript
复制
for key, value in myDict.items():
    df[key] = value
票数 1
EN

Stack Overflow用户

发布于 2019-07-01 17:53:03

如果Dict键与df.columns同步,则可以将df.replace()regex=True一起使用

代码语言:javascript
复制
myDict = {"Rude Staff":12, "Poor Hygiene":4, "Out of Stock":3}
df.replace('\?',myDict,regex=True)

代码语言:javascript
复制
        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
票数 1
EN

Stack Overflow用户

发布于 2019-07-01 18:18:41

假设dict中的键和DataFrame中的键相同,您可以在列上迭代,为包含'?‘的行赋值。

演示:

代码语言:javascript
复制
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)

显示:

代码语言:javascript
复制
       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

显示只有?值被替换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56833294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档