Helllo,
Мне нужно перебрать кадр данных pandas, чтобы передать каждую строку в качестве аргумента функции (фактически, конструктора класса) с **kwargs
. Это означает, что каждая строка должна вести себя как словарь с ключами имен столбцов и значения соответствующих для каждой строки.
Это работает, но работает очень плохо:
import pandas as pd
def myfunc(**kwargs):
try:
area = kwargs.get('length', 0)* kwargs.get('width', 0)
return area
except TypeError:
return 'Error : length and width should be int or float'
df = pd.DataFrame({'length':[1,2,3], 'width':[10, 20, 30]})
for i in range(len(df)):
print myfunc(**df.iloc[i])
Есть предложения, как сделать это более эффективным? Я попытался повторить с попытался df.iterrows()
,
но я получаю следующую ошибку:
TypeError: аргумент myfunc () после ** должен быть отображением, а не кортежем
Я также пробовал df.itertuples()
и df.values
, но либо я что-то упустил, либо это означает, что мне нужно преобразовать каждый кортеж / np.array в pd.Series или dict, что также будет медленным.
Мое ограничение заключается в том, что скрипт должен работать с Python 2.7 и пандами 0.14.1.
Заранее спасибо за помощь!