首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过遍历字典有效地替换数据格式中的值?

如何通过遍历字典有效地替换数据格式中的值?
EN

Stack Overflow用户
提问于 2019-11-21 02:22:45
回答 1查看 235关注 0票数 0

我有一份工资范围的数据,如:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame(columns=['Salary'])
df.Salary = ['30,000-39,999', '5,000-7,499', '250,000-299,999', '4,000-4,999', '60,000-69,999', '10,000-14,999', '80,000-89,999', '$0-999', '2,000-2,999', '70,000-79,999', '90,000-99,999', '125,000-149,999', '$0-999', '$0-999', '40,000-49,999', '20,000-24,999', '125,000-149,999', '$0-999', '10,000-14,999', '15,000-19,999', '20,000-24,999', '100,000-124,999', '$0-999']
df

我想用数字替换工资范围的这些字符串值,其中1表示$0-999,2表示1000-1999等等。下面是我的代码,其中我创建了一个将字符串映射到数字的字典,并使用2 for循环-一个用于遍历dataframe中的每一行,另一个用于遍历字典中的每个元素:

代码语言:javascript
复制
salary_dict = {'$0-999':1, '1,000-1,999':2, '2,000-2,999':3, '3,000-3,999':4, '4,000-4,999':5, 
           '5,000-7,499':6, '7,500-9,999':7, '10,000-14,999':8, '15,000-19,999':9, '20,000-24,999':10, 
           '25,000-29,999':11, '30,000-39,999':12, '40,000-49,999':13, '50,000-59,999':14, '60,000-69,999':15, 
           '70,000-79,999':16, '80,000-89,999':17, '90,000-99,999':18, '100,000-124,999':19, '125,000-149,999':20, 
           '150,000-199,999':21, '200,000-249,999':22, '250,000-299,999':23, '300,000-500,000':24, '> $500,000':25}

for i in range(len(df)):
    for key in salary_dict:
        if df.Salary[i]==key:
            df.Salary[i] = salary_dict[key]
            break

df

对于小型数据文件来说,这是可以的,但是对于更大(更长)的数据文件,代码需要很长时间才能完成运行。我该如何优化它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-21 02:27:07

  • 最有效的方法是使用串联apply函数。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.apply.html
  • using dictionary.
  • If函数在串联中应用定义的任何函数,在这里,我们将df['Salary']的每个元素映射为它在dictionary.
  • If中的等价值,您不了解这部分,查看一下python lambdas.
  • Also get方法,在二叉树上使用,只是为了保证内部密钥不在二叉码中。

代码语言:javascript
复制
df['Salary'] = df['Salary'].apply(lambda x: salary_dict.get(x, x))
print(df)

产出:

代码语言:javascript
复制
   Salary
0   12
1   6
2   23
3   5
4   15
5   8
6   17
7   1
8   3
9   16
10  18
11  20
12  1
13  1
14  13
15  10
16  20
17  1
18  8
19  9
20  10
21  19
22  1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58966303

复制
相关文章

相似问题

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