рассмотрим 6 пропущенных строк, почему диапазон индекса остается прежним? - PullRequest
0 голосов
/ 30 сентября 2019

Я изучаю этот пост

Этот код предназначен для исследовательского анализа данных в наборе данных Auto-mpg.

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'
column_names = ['MPG','Cylinders','Displacement','Horsepower','Weight',
                'Acceleration', 'Year', 'Origin', 'Name']
df = pd.read_csv(url, names=column_names, sep='\s+', na_values="?")

# The last column (name) is a unique id for the car, so we drop it
df = df.drop(columns=['Name'])
df.info()

сосредоточен на этой части вывода

RangeIndex: 398 entries, 0 to 397

, который будет

Int64Index: 392 entries, 0 to 397

после пропуска пропущенных значений

df = df.dropna()
df.info()

Если 6 строк отброшено, почему диапазон индекса по-прежнему равен от 0 до 397?

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Pandas создает новый фрейм данных с удалением некоторых записей. Он не переиндексирует фрейм данных. В результате записи с индексом в новом фрейме данных соответствуют записи с таким же индексом в старом фрейме данных. Индексы нового информационного кадра будут соответствовать индексу нового информационного кадра. В вашем примере конечный индекс имеет диапазон от 0 до 397, но он не содержит все значения от 0 до 397. Если исходный индекс был с префиксом vin или чем-то более значимым, вы, вероятно, ожидаете такого поведения.

До дропны

In : df.index                                                                                                                                                                                          
Out: RangeIndex(start=0, stop=398, step=1)

Но после дропны

Out: Int64Index([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
        ...
        388, 389, 390, 391, 392, 393, 394, 395, 396, 397],
       dtype='int64', length=392)

Точную разницу можно получить с помощью вызова .difference между индексами.

df_before.index.difference(df_after.index)
Int64Index([32, 126, 330, 336, 354, 374], dtype='int64')
1 голос
/ 30 сентября 2019

Когда вы отбрасываете столбцы в пандах, индекс не сбрасывается. Таким образом, индекс будет по-прежнему изменяться от 0 до 398, но в нем будут «дыры» для записей, которые были отброшены. Запустите df.shape, и вы увидите, что строки действительно были удалены. Чтобы сбросить индекс, вы можете запустить

df = df.reset_index()
df.index

, и вы увидите, что индекс изменяется от 0 до 392, как вы ожидаете

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