Удаление столбца индекса в пандах при чтении csv


128

У меня есть следующий код, который импортирует файл CSV. Есть 3 столбца, и я хочу установить первые два из них в качестве переменных. Когда я устанавливаю для второго столбца переменную «эффективность», индексный столбец также присоединяется. Как мне избавиться от столбца индекса?

df = pd.DataFrame.from_csv('Efficiency_Data.csv', header=0, parse_dates=False)
energy = df.index
efficiency = df.Efficiency
print efficiency

Я пробовал использовать

del df['index']

после того, как я установил

energy = df.index

который я нашел в другом сообщении, но это приводит к "KeyError: 'index'"

Ответы:


70

DataFrames и Series всегда имеют индекс. Хотя он отображается рядом со столбцами, это не столбец, поэтому del df['index']он не работал.

Если вы хотите заменить индекс простыми последовательными числами, используйте df.reset_index().

Чтобы понять, почему существует индекс и как он используется, см., Например, 10 минут до Pandas .


1
Спасибо! Я решил просто импортировать его другим способом, не используя панд. Мне нужно выполнить некоторые арифметические действия с каждым из столбцов, и python не понравился прикрепленный столбец индекса. Pandas - это, безусловно, самый простой способ импорта данных, но не всегда лучший из тех, что я обнаружил.
Богдан Янишевский

2
Вы пробовали использовать Pandas для арифметических операций?
Джейми Булл

1
можно ли удалить индексное имя?
Quant

3
Да, index.name = None.
Дэн Аллан

1
@BogdanJaniszewski, если вы не использовали панд, то почему вы приняли это как ответ?
multigoodverse

250

При чтении в файл CSV и из него включите аргумент, index=Falseнапример:

 df.to_csv(filename, index=False)

и читать из CSV

df.read_csv(filename, index=False)  

Это должно предотвратить проблему, поэтому вам не нужно будет исправлять ее позже.


8
Большое спасибо. Это именно то, что ищет вопрос.
Pale Blue Dot

1
«header = False» работает для удаления заголовков таким же образом
Дж. Дальгрен

29
должно быть index_col=False.
Vedda

1
Использование df.to_sql("table",cursor,if_exists="append",index=False)также исправляет ошибку sqlitesqlite3.OperationalError: table message has no column named index
Анна

1
@vedda похоже index=Falseна to_excel()и index_col=Falseс read_csv()в пандах 0.23.4. : - /
мэтт уилки

70

df.reset_index(drop=True, inplace=True)


2
На самом деле это мое любимое решение, но не очень продуманный ответ. В руководстве говорится об аргументе drop: «Не пытайтесь вставить индекс в столбцы фрейма данных. Это сбрасывает индекс до целочисленного индекса по умолчанию». pandas.pydata.org/pandas-docs/stable/generated/…
tommy.carstensen

@ tommy.carstensen Тогда как бы вы не добавляли целые числа в индекс вместо предыдущего индекса? Думаю, это неправильное понимание текста вашей ссылки. Здесь вопрос в том, чтобы сбросить индекс . И это достигается здесь. Вы получаете целые числа по умолчанию, так как нет даты без индекса, но вы удалили предыдущий индекс. Вот почему этот ответ должен быть принятым ответом, в том числе потому, что он использует эффективную память inplace=True.
Лоренц

13

Вы можете установить один из столбцов в качестве индекса, например, если это «id». В этом случае столбец индекса будет заменен одним из выбранных вами столбцов.

df.set_index('id', inplace=True)

3

Если ваша проблема такая же, как у меня, вы просто хотите сбросить заголовки столбцов с 0 до размера столбца. Делать

df = pd.DataFrame(df.values);

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

Не лучшая идея, если у вас разнородные типы данных. Лучше просто используйте

df.columns = range(len(df.columns))

2

вы можете указать, какой столбец является индексом в вашем файле csv, используя параметр index_col функции from_csv, если это не решает вашу проблему, пожалуйста, предоставьте пример ваших данных


2

Одна вещь, которую я делаю, это df=df.reset_index() тогдаdf=df.drop(['index'],axis=1)


Ошибка: «метки ['index'] не содержатся в оси»
Васин Юрий

@VasinYuriy это означает df.reset_index().drop(columns=['yourfirstindex', 'yoursecondindex']), что он работает с 'index' только в стандартном случае, когда индекс не имеет имени, а затем становится столбцом с именем 'index' с df.reset_index().drop(columns=['index']). Добавленный параметр axis=1- значение по умолчанию. Этот метод не рекомендуется, поскольку @SubhojitMukherjee reset_index(inplace=True)работает "на месте" и, таким образом, экономит память.
Лоренц
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.