English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Пример операции重建 индекса 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. По умолчанию, операция выполняется по столбцам, где каждое столбец рассматривается как массив.
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, можно выполнять операции построчно.
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
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-функции, которые принимают один аргумент и возвращают один аргумент.
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
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