将列表理解与Pandas系列和数据帧一起使用

时间:2018-06-13 06:26:10

标签: python-3.x pandas dataframe list-comprehension series

我编写了以下代码,接受字符串的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])

必须有一个列表理解方法才能做到这一点吗?

2 个答案:

答案 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循环......它已经过优化,可以使用数据帧和系列的内置方法......