неподдерживаемый тип (ы) операндов для +: 'int' и 'str' с использованием среднего значения панд - PullRequest
3 голосов
/ 14 марта 2019

Когда я пытаюсь получить среднее значение одного из столбцов моего фрейма данных, отображается ошибка:

TypeError: unsupported operand type(s) for +: 'int' and 'str'

Вот код, который у меня есть:

import pandas as pd

import numpy as np

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/autos/imports-85.data"

df = pd.read_csv(url, header = None, )

headers = ["symboling","normalized-losses","make","fuel-type","aspiration","num-of-doors","body-style","drive-wheels","engine-location","wheel-base","lenght","width","height","curb-weight","engine-type","num-of-cylinders","engine-size","fuel-system","bore","stroke","compression-ratio","horsepower","peak-rpm","city-mpg","highway-mpg","price"]

df.columns = headers

df.replace('?',np.nan, inplace=True)

mean_val = df['normalized-losses'].mean()

print(mean_val)

Ответы [ 2 ]

4 голосов
/ 14 марта 2019

Вам необходимо преобразовать тип данных столбца в числовое значение с помощью pd.to_numeric().Если вы используете опцию errors='coerce', то она автоматически заменит нечисловые символы на NaN.

mean_val = pd.to_numeric(df['normalized-losses'], errors='coerce').mean()

print(mean_val)

> 122.0
1 голос
/ 14 марта 2019

Если добавить ответ Натаниэля, у вас есть смесь float и str.Вы можете увидеть это, если вы

print(df['normalized-losses'].apply(type))

, который вернет

0      <class 'float'>
1      <class 'float'>
2      <class 'float'>
3        <class 'str'>
4        <class 'str'>

Как говорится в вашем сообщении об ошибке, вам нужно сделать все ваши данные типа float.Вы можете использовать pd.to_numeric, как предложил Натаниэль, или вы можете использовать

df['normalized-losses'] = df['normalized-losses'].astype('float')
mean_val = df['normalized-losses'].mean()
print(mean_val)

Выход

122.0

Если вас интересует только столбец нормализованных потерь и вы знаете, что все ваши строки могут быть преобразованы должным образом (в этом случае, я полагаю, они могут это сделать, поскольку все они представляют собой строки чисел, такие как «130»), вы можете просто сделать это,Если вы собираетесь использовать оставшиеся данные и хотите преобразовать все числовые строки, используйте реализацию Натаниэля.

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