TypeError: объект 'Series' не может быть вызван при помощи pandas apply () с пользовательской функцией - PullRequest
0 голосов
/ 22 октября 2018

Связывание с функцией Pandas dataframe Apply () для обновления всех строк функцией.Результатом является ошибка типа

----> 1 df_usnews['AvgMathSAT_IQR'].apply(interquartile(df_usnews))

/anaconda/lib/python3.5/site-packages/pandas/core/series.py in apply(self, func, convert_dtype, args, **kwds)
   2235             values = lib.map_infer(values, boxer)
   2236 
-> 2237         mapped = lib.map_infer(values, f, convert=convert_dtype)
   2238         if len(mapped) and isinstance(mapped[0], Series):
   2239             from pandas.core.frame import DataFrame

pandas/src/inference.pyx in pandas.lib.map_infer (pandas/lib.c:63043)()

TypeError: 'Series' object is not callable

def interquartile(df):
        return pd.to_numeric(df.ThirdQuartileMathSAT) - pd.to_numeric(df.FirstQuartileMathSAT)


q75_upper = np.percentile(df_usnews.AvgMathSAT, q=75, interpolation='higher', axis=0)
q25_lower = np.percentile(df_usnews.AvgMathSAT, q=25, interpolation='lower', axis=0)
interquartile = q75_upper - q25_lower
df_usnews['AvgMathSAT_IQR'] = 0
df_usnews['AvgMathSAT_IQR'].apply(interquartile(df_usnews))

1 Ответ

0 голосов
/ 22 октября 2018

Исправление вашего кода, так как interquartile работает с DataFrame, apply также должно.Вам нужно будет сделать

df_usnews['AvgMathSAT_IQR'] = df_usnews.apply(interquartile)

Обратите внимание, что при передаче функции в apply она передается без аргументов (т. Е. Она не вызывается).

К счастью, pd.to_numeric векторизовано, поэтому вам не нужно применять эту функцию здесь.

df_usnews['AvgMathSAT_IQR'] = interquartile(df_usnews)

Или

df_usnews['AvgMathSAT_IQR'] = df_usnews.pipe(interquartile)

Будет намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...