簡體   English   中英

如何通過遍歷字典有效地替換 dataframe 中的值?

[英]How to efficiently replace values in a dataframe by iterating through a dictionary?

我有一個 dataframe 的工資范圍,如下所示:

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 中的每一行,一個循環遍歷字典中的每個元素:

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

在此處輸入圖像描述

這對於小型數據幀是可以的,但是對於更大(更長)的數據幀,代碼需要很長時間才能完成運行。 我該如何優化它?

  • 最有效的方法是使用系列apply function。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.apply.html
  • 在系列上使用apply function 將定義的任何 function 應用於每個元素。
  • 在這里,我們將df['Salary']每個元素映射到字典中的等效值。
  • 如果您不理解這部分lambda x: salary_dict.get(x, x)查看 python lambdas。
  • 字典上的get方法也僅用於保護密鑰不在字典中。
df['Salary'] = df['Salary'].apply(lambda x: salary_dict.get(x, x))
print(df)

output:

   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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM