English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Применение функций Pandas

Пример операции重建 индекса Pandas

Чтобы применить функцию из своей библиотеки или другого пакета к объекту Pandas, вам следует знать три важных метода. Вот как они описаны. Применяемый метод зависит от того, хотите ли вы выполнять операцию над整个 датой, или по строкам, или по столбцам, или по элементам.

Приложение таблицевой функции: pipe() Приложение функции строки или столбца: apply() Приложение функции элемента: applymap()

Приложение таблицевой функции

Вы можете выполнять пользовательские операции над DataFrame, передавая функцию и соответствующее количество параметров в качестве параметров потока.

Функция сумматора

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

  def adder(ele1,ele2):
    return ele1+ele2

Мы используем пользовательские функции для выполнения операций над DataFrame.

 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.pipe(adder,2)

Посмотрим на полный код:

 import pandas as pd
 import numpy as np
 def adder(ele1,ele2):
    return ele1+ele2
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.pipe(adder,2)
 print(df.apply(np.mean))

Результат выполнения:

       col1 col2 col3
 0 2.176704 2.219691 1.509360
 1 2.222378 2.422167 3.953921
 2 2.241096 1.135424 2.696432
 3 2.355763 0.376672 1.182570
 4 2.308743 2.714767 2.130288

Приложение функции строки или столбца

Метод apply() может применяться к любому функции по оси DataFrame или Panel, как и методы описательной статистики, и принимает опциональный параметр axis. По умолчанию, операция выполняется по столбцам, где каждое столбец рассматривается как массив.

Пример 1

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.apply(np.mean)
 print(df.apply(np.mean))

Результат выполнения:

 col1 -0.288022
 col2 1.044839
 col3 -0.187009
 dtype: float64

Через передачу параметра axis, можно выполнять операции построчно.

Пример 2

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.apply(np.mean,axis=1)
 print(df.apply(np.mean))

Результат выполнения:

 col1 0.034093
 col2 -0.152672
 col3 -0.229728
 dtype: float64

Пример 3

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.apply(lambda x: x.max() - x.min())
 print(df.apply(np.mean))

Результат выполнения:

 col1 -0.167413
 col2 -0.370495
 col3 -0.707631
 dtype: float64

Применение функций на уровне элементов

Не все функции можно векторизовать (NumPy-массивы ни не возвращают другой массив, ни не возвращают никакого значения), метод applymap() на DataFrame и метод map() на Series аналогично принимают любые Python-функции, которые принимают один аргумент и возвращают один аргумент.

Пример 1

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 # Пользовательская функция
 df['col1'].map(lambda x: x*100)
 print(df.apply(np.mean))

Результат выполнения:

 col1 0.480742
 col2 0.454185
 col3 0.266563
 dtype: float64

Пример 2

 import pandas as pd
 import numpy as np
 # Пользовательская функция
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.applymap(lambda x: x*100)
 print(df.apply(np.mean))

Результат выполнения:

 col1 0.395263
 col2 0.204418
 col3 -0.795188
 dtype: float64