我正在使用 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有很多项目和数据集是迭代的每个项目。
第二:似乎不起作用:(
任何想法?
答案 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
接受密钥替换对的字典,它应该比一次迭代每个密钥替换快得多。