Pandas DataFrame max, min и mean терпит неудачу на столбцах с Nan - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь вычислить максимальное, минимальное и среднее значение для каждого столбца в панде DataFrame.Однако у меня возникают проблемы с очисткой моих столбцов.

В одном из моих столбцов вместо значения "?" Я попытался очистить, выполнив:

df = pd.read_csv("Auto.csv")

df["horsepower"].replace("?", np.nan, inplace=True)  # sanitize the horsepower column

min_values = df.drop(columns=["name"]).dropna().min().to_dict()
max_values = df.drop(columns=["name"]).dropna().max().to_dict()
mean_values = df.drop(columns=["name"]).dropna().mean().to_dict()

При выполненииэто минимальное, среднее и максимальное значения неверны!Обратите внимание, что я отбрасываю столбец «имя», поскольку хочу исключить качественные данные.

Набор данных можно загрузить здесь http://www -bcf.usc.edu / ~ gareth / ISL /Auto.csv

РЕДАКТИРОВАТЬ:

Minimum values:  {'mpg': 9.0, 'cylinders': 3.0, 'displacement': 68.0, 'horsepower': 100.0, 'weight': 1613.0, 'acceleration': 8.0, 'year': 70.0, 'origin': 1.0}
Maximum values:  {'mpg': 46.6, 'cylinders': 8.0, 'displacement': 455.0, 'horsepower': 98.0, 'weight': 5140.0, 'acceleration': 24.8, 'year': 82.0, 'origin': 3.0}
Mean values:  {'mpg': 23.44591836734694, 'cylinders': 5.471938775510204, 'displacement': 194.41198979591837, 'horsepower': inf, 'weight': 2977.5841836734694, 'acceleration': 15.541326530612228, 'year': 75.9795918367347, 'origin': 1.5765306122448979}

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Если вы не возражаете против использования типа dtype вашего столбца horsepower, добавьте следующую строку: df["horsepower"] = df["horsepower"].astype(np.float64)

Используя ваш пример:

df = pd.read_csv("Auto.csv")
df["horsepower"].replace("?", np.nan, inplace=True)
df["horsepower"] = df["horsepower"].astype(np.float64)

Тогда для df.drop(['name'], axis=1).max(axis=0) Я получаю:

mpg               46.6
cylinders          8.0
displacement     455.0
horsepower       230.0
weight          5140.0
acceleration      24.8
year              82.0
origin             3.0
dtype: float64

Для df.drop(['name'], axis=1).min(axis=0) Я получаю:

mpg                9.0
cylinders          3.0
displacement      68.0
horsepower        46.0
weight          1613.0
acceleration       8.0
year              70.0
origin             1.0
dtype: float64

И для df.drop(['name'], axis=1).mean(axis=0) Я получаю:

mpg               23.515869
cylinders          5.458438
displacement     193.532746
horsepower       104.469388
weight          2970.261965
acceleration      15.555668
year              75.994962
origin             1.574307
dtype: float64
0 голосов
/ 29 января 2019

Как я уже упоминал в комментарии выше, dropna удалит всю строку, если в ней есть какие-либо значения NaN

df = pd.read_csv("Auto.csv")

df["horsepower"].replace("?", np.nan, inplace=True)
df["horsepower"]=pd.to_numeric(df["horsepower"],errors='coerce')

Использование describe

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