【问题标题】:Using List Comprehension with Pandas Series and Dataframes将列表理解与 Pandas 系列和数据框一起使用
【发布时间】:2018-11-22 15:09:21
【问题描述】:

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

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

【问题讨论】:

  • @cosmic_inquiry 和 jezrael 都是正确的。我可以用 df.replace 替换我的函数,并使用 pd.concat() 应用于所有列。谢谢你们俩
  • 我不明白您当前的for 循环方法的问题。如果有的话,它可能会更高效、可读性和适应性更强。

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


【解决方案1】:

这是可能的,但是需要concat for DataFrame 因为得到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)

【讨论】:

  • 好的,是的,pd.concat 可以在所有列上使用它。谢谢你们。
【解决方案2】:
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 循环...它已优化为使用数据帧和系列的内置方法...

【讨论】:

  • 谢谢,这适用于替换功能,但是当我想将它应用于数据框的所有列时遇到同样的问题 - 需要一个 for 循环?这是调整后的示例: `df2 = pd.DataFrame([{'key1':'apple banana orange', 'key2':'banana apple pineapple'}]) repl_dict = {'an':'foo', 'pp ':'zz'} df2.replace({'key1':repl_dict}, inplace=True, regex=True)'
猜你喜欢
  • 1970-01-01
  • 2017-10-23
  • 2016-05-12
  • 1970-01-01
  • 2019-10-17
  • 2016-10-06
  • 2019-03-14
  • 2015-07-31
  • 1970-01-01
相关资源
最近更新 更多