Я хочу передать словарь в качестве дополнительного аргумента функции. Функция должна применяться к каждой строке кадра данных. Поэтому я использую «apply». Ниже у меня есть небольшой пример моей попытки:Python Pandas Apply, Pass Dictionary как аргумент
import pandas as pd
import numpy as np
def fun(df_row, dict1):
return df_row['A']*2*max(dict1['x'])
df = pd.DataFrame(np.random.randn(6,2),columns=list('AB'))
dict_test = {'x': [1,2,3,4], 'y': [5,6,7,8]}
df['D'] = df.apply(fun, args = (dict_test), axis = 1)
Я получаю следующее сообщение об ошибке: ('весело() занимает ровно 1 аргумент (3 дано)', u'occurred по индексу 0') I использовать ** dict1 для обозначения пар ключ-значение в функции «весело»
Как ни странно, если я прохожу два заданы параметры, все работает отлично
def fun(df_row, dict1, dict2):
return df_row['A']*2*max(dict1['x'])
df = pd.DataFrame(np.random.randn(6,2),columns=list('AB'))
dict_test = {'x': [1,2,3,4], 'y': [5,6,7,8]}
df['D'] = df.apply(fun, axis = 1, args = (dict_test, dict_test))
Вы не должны использовать '**'. Словарь будет передан как обычный аргумент, а не как аргументы ключевого слова. – zondo
Если я удаляю **, я получаю ошибку ('fun() принимает ровно 2 аргумента (3 заданных)', u'occurred при индексе 0 ') – skr
Если вы определяете 'fun()', чтобы принимать '* args' и печатать 'args', он должен дать вам представление о том, какие данные передаются ему. Вам определенно нужно добавить еще один параметр в свою функцию, но это должно сказать вам, что это такое. – zondo