Я получаю ошибку времени выполнения, когда пытаюсь получить средние значения моих числовых столбцов в моем Pandas кадре данных. Сначала я думал, что это связано с dtype, но я проверил, и (как вы можете видеть) они все числовые:
df = pd.read_csv(DATA_PATH, delimiter=',')
df.dtypes
id object
age int64
income float64
children int64
gender object
region object
married object
car object
savings_acct object
current_acct object
mortgage object
pep object
dtype: object
df.head(5)
id age income children gender region married car savings_acct current_acct mortgage pep
0 ID12101 48 17546.0 1 FEMALE INNER_CITY NO NO NO NO NO YES
1 ID12102 40 30085.1 3 MALE TOWN YES YES NO YES YES NO
2 ID12103 51 16575.4 0 FEMALE INNER_CITY YES YES YES YES NO NO
3 ID12104 23 20375.4 3 FEMALE TOWN YES NO NO YES NO NO
4 ID12105 57 50576.3 0 FEMALE RURAL YES NO YES NO NO NO
Вот где я столкнулся проблемы:
# means
print("Means: \n")
print(df[["age","income","children"]].mean() + "\n")
Means:
---------------------------------------------------------------------------
UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U32'), dtype('<U32')) -> dtype('<U32')
During handling of the above exception, another exception occurred:
UFuncTypeError Traceback (most recent call last)
<ipython-input-27-e56207deaccf> in <module>
1 # means
2 print("Means: \n")
----> 3 print(df[["age","income","children"]].mean() + "\n")
~/anaconda3/lib/python3.7/site-packages/pandas/core/ops/common.py in new_method(self, other)
62 other = item_from_zerodim(other)
63
---> 64 return method(self, other)
65
66 return new_method
~/anaconda3/lib/python3.7/site-packages/pandas/core/ops/__init__.py in wrapper(left, right)
498 lvalues = extract_array(left, extract_numpy=True)
499 rvalues = extract_array(right, extract_numpy=True)
--> 500 result = arithmetic_op(lvalues, rvalues, op, str_rep)
501
502 return _construct_result(left, result, index=left.index, name=res_name)
~/anaconda3/lib/python3.7/site-packages/pandas/core/ops/array_ops.py in arithmetic_op(left, right, op, str_rep)
195 else:
196 with np.errstate(all="ignore"):
--> 197 res_values = na_arithmetic_op(lvalues, rvalues, op, str_rep)
198
199 return res_values
~/anaconda3/lib/python3.7/site-packages/pandas/core/ops/array_ops.py in na_arithmetic_op(left, right, op, str_rep)
149 result = expressions.evaluate(op, str_rep, left, right)
150 except TypeError:
--> 151 result = masked_arith_op(left, right, op)
152
153 return missing.dispatch_fill_zeros(op, left, right, result)
~/anaconda3/lib/python3.7/site-packages/pandas/core/ops/array_ops.py in masked_arith_op(x, y, op)
110 if mask.any():
111 with np.errstate(all="ignore"):
--> 112 result[mask] = op(xrav[mask], y)
113
114 result, _ = maybe_upcast_putmask(result, ~mask, np.nan)
UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U32'), dtype('<U32')) -> dtype('<U32')
Я пытался преобразовать числовые типы все в числа с плавающей точкой, чтобы они были согласованными, но это (что неудивительно) не имело никакого значения: /