Использование понимания списка с сериями Pandas и датафреймами - PullRequest
0 голосов
/ 13 июня 2018

Я написал следующий код, который принимает ряд строк (столбец данных) строк и словарь терминов для замены в строках.

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 голосов
/ 13 июня 2018
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

Весь смысл панд в том, чтобы не использовать циклы ... оптимизировано использование встроенных методов для кадров данных и рядов...

0 голосов
/ 13 июня 2018

Возможно, но тогда нужно concat для 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)
...