Чтобы применить свои собственные функции или функции другой библиотеки к объектам Pandas, вы должны знать о трех важных методах. Методы были обсуждены ниже. Подходящий метод, который нужно использовать, зависит от того, ожидает ли ваша функция работы со всем DataFrame, по строкам или столбцам, или по элементам.
- Таблица мудрая Функция Применение: труба ()
- Функция строки или столбца мудрая Применение: apply ()
- Элемент мудрой функции Применение: applymap ()
Табличное применение функций
Пользовательские операции можно выполнить, передав функцию и соответствующее количество параметров в качестве аргументов канала. Таким образом, операция выполняется на весь DataFrame.
Например, добавьте значение 2 ко всем элементам в 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
Функция выбора строки или столбца
Произвольные функции могут быть применены вдоль осей DataFrame или Panel с помощью метода apply () , который, как и методы описательной статистики, принимает необязательный аргумент оси. По умолчанию операция выполняется по столбцам, принимая каждый столбец как массив.
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
Передав параметр оси , операции могут выполняться по строкам.
Пример 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
Элемент Wise Функция ПрименениеНе все функции могут быть векторизованы (ни массивы 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'])
# My custom function
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
# My custom function
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.applymap(lambda x:x*100)
print df.apply(np.mean)