我编写了以下代码,接受字符串的pandas系列(数据帧列)和要在字符串中替换的术语字典。
def phrase_replace(repl_dict, str_series):
for k,v in repl_dict.items():
str_series = str_series.str.replace(k,v)
return str_series
它工作正常,但似乎我应该能够使用某种列表理解而不是for循环。
我不想使用str_series = []
或{}
因为我不想要返回列表或字典,而是pandas.core.series.Series
同样,如果我想在数据帧的每一列上使用该函数:
for column in df.columns:
df[column] = phrase_replace(repl_dict, df[column])
必须有一个列表理解方法才能做到这一点吗?
答案 0 :(得分:2)
有可能,但DataFrame
需要concat
,因为获取list of Series
:
df = pd.concat([phrase_replace(repl_dict, df[column]) for column in df.columns], axis=1)
但也许需要replace
字典:
df = df.replace(repl_dict)
答案 1 :(得分:0)
df = pd.DataFrame({'words':['apple','banana','orange']})
repl_dict = {'an':'foo', 'pp':'zz'}
df.replace({'words':repl_dict}, inplace=True, regex=True)
df
Out[263]:
words
0 azzle
1 bfoofooa
2 orfooge
如果您想申请所有栏目:
df2 = pd.DataFrame({'key1':['apple', 'banana', 'orange'], 'key2':['banana', 'apple', 'pineapple']})
df2
Out[13]:
key1 key2
0 apple banana
1 banana apple
2 orange pineapple
df2.replace(repl_dict,inplace=True, regex=True)
df2
Out[15]:
key1 key2
0 azzle bfoofooa
1 bfoofooa azzle
2 orfooge pineazzle
pandas的全部意义在于不使用for循环......它已经过优化,可以使用数据帧和系列的内置方法......