Удаление столбца индекса в пандах при чтении 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, если это не решает вашу проблему, пожалуйста, предоставьте пример ваших данных

yemu
источник
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)работает "на месте" и, таким образом, экономит память.
Лоренц