将pandas数据集中的值替换为字典

时间:2018-01-22 23:31:14

标签: python pandas dictionary replace

我正在使用 pandas excel 文档中提取一列。之后,我想替换所选列的每一行,包含在列表中的多个词典中的所有键。

import pandas as pd
file_loc = "excelFile.xlsx"
df = pd.read_excel(file_loc, usecols = "C")

在这种情况下,我的数据帧由df ['Q10']调用,此数据框的行数超过10k。

传统上,如果我想替换df中的值,我会使用;

df['Q10'].str.replace('val1', 'val1')

现在,我有一个单词词典,如:

mydic = [
   {
      'key': 'wasn't',
      'value': 'was not' 
   }
   {
      'key': 'I'm',
      'value': 'I am' 
   }
   ... + tons of line of key value pairs
]

目前,我已经创建了一个迭代“mydic”和逐个替换的函数。

def replaceContractions(df, mydic):
    for cont in contractions:
        df.str.replace(cont['key'], cont['value'])

接下来我调用此函数传递mydic和我的dataframe:

replaceContractions(df['Q10'], contractions)

第一个问题:这是非常昂贵的,因为mydic有很多项目和数据集是迭代的每个项目。

第二:似乎不起作用:(

任何想法?

1 个答案:

答案 0 :(得分:2)

转换你的"字典"更友好的格式:

m = {d['key'] : d['value'] for d in mydic}

m   
{"I'm": 'I am', "wasn't": 'was not'}

接下来,使用replace开关拨打regex并将m传递给它。

df['Q10'] = df['Q10'].replace(m, regex=True) 

replace接受密钥替换对的字典,它应该比一次迭代每个密钥替换快得多。