Как сохранить dataframe в csv python
Перейти к содержимому

Как сохранить dataframe в csv python

  • автор:

Как экспортировать Pandas DataFrame в CSV (с примером)

Вы можете использовать следующий синтаксис для экспорта кадра данных pandas в файл CSV:

df.to_csv (r' C:\Users\Bob\Desktop\my_data.csv', index= False ) 

Обратите внимание, что index=False указывает Python удалить столбец индекса при экспорте DataFrame. Не стесняйтесь отбрасывать этот аргумент, если вы хотите сохранить столбец индекса.

В следующем пошаговом примере показано, как использовать эту функцию на практике.

Шаг 1: Создайте фрейм данных Pandas

Во-первых, давайте создадим DataFrame pandas:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df points assists rebounds 0 25 5 11 1 12 7 8 2 15 7 10 3 14 9 6 4 19 12 6 5 23 9 5 

Шаг 2: Экспортируйте DataFrame в файл CSV

Далее экспортируем DataFrame в файл CSV:

#export DataFrame to CSV file df.to_csv (r' C:\Users\Bob\Desktop\my_data.csv', index= False ) 

Шаг 3. Просмотрите CSV-файл

Наконец, мы можем перейти к месту, куда мы экспортировали CSV-файл, и просмотреть его:

points,assists,rebounds 25,5,11 12,7,8 15,7,10 14,9,6 19,12,6 23,9,5 

Обратите внимание, что индексного столбца нет в файле, поскольку мы указали index=False .

Также обратите внимание, что заголовки находятся в файле, поскольку аргументом по умолчанию в функции to_csv() является headers=True .

Ради интереса, вот как выглядел бы CSV-файл, если бы мы не указали аргумент index=False :

,points,assists,rebounds 0,25,5,11 1,12,7,8 2,15,7,10 3,14,9,6 4,19,12,6 5,23,9,5 

Подробное руководство по функции to_csv() см.в документации pandas .

Как сохранить Pandas DataFrame для дальнейшего использования (с примером)

Часто вам может потребоваться сохранить кадр данных pandas для последующего использования без необходимости повторного импорта данных из файла CSV.

Самый простой способ сделать это — использовать to_pickle() для сохранения DataFrame в виде файла рассола:

df.to_pickle (" my_data.pkl ") 

Это сохранит DataFrame в вашей текущей рабочей среде.

Затем вы можете использовать read_pickle() для быстрого чтения DataFrame из файла рассола:

df = pd.read_pickle (" my_data.pkl ") 

В следующем примере показано, как использовать эти функции на практике.

Пример: сохранение и загрузка Pandas DataFrame

Предположим, мы создаем следующий кадр данных pandas, который содержит информацию о различных баскетбольных командах:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame print(df) team points assists rebounds 0 A 18 5 11 1 B 22 7 8 2 C 19 7 10 3 D 14 9 6 4 E 14 12 6 5 F 11 9 5 6 G 20 9 9 7 H 28 4 12 

Мы можем использовать df.info() для просмотра типа данных каждой переменной в DataFrame:

#view DataFrame info print(df.info ()) RangeIndex: 8 entries, 0 to 7 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 team 8 non-null object 1 points 8 non-null int64 2 assists 8 non-null int64 3 rebounds 8 non-null int64 dtypes: int64(3), object(1) memory usage: 292.0+ bytes None 

Мы можем использовать функцию to_pickle() , чтобы сохранить этот DataFrame в файл рассола с расширением .pkl :

#save DataFrame to pickle file df.to_pickle (" my_data.pkl ") 

Наш DataFrame теперь сохранен как файл рассола в нашей текущей рабочей среде.

Затем мы можем использовать функцию read_pickle() для быстрого чтения DataFrame:

#read DataFrame from pickle file df= pd.read_pickle (" my_data.pkl ") #view DataFrame print(df) team points assists rebounds 0 A 18 5 11 1 B 22 7 8 2 C 19 7 10 3 D 14 9 6 4 E 14 12 6 5 F 11 9 5 6 G 20 9 9 7 H 28 4 12 

Мы можем снова использовать df.info() , чтобы убедиться, что тип данных каждого столбца такой же, как и раньше:

#view DataFrame info print(df.info ()) RangeIndex: 8 entries, 0 to 7 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 team 8 non-null object 1 points 8 non-null int64 2 assists 8 non-null int64 3 rebounds 8 non-null int64 dtypes: int64(3), object(1) memory usage: 292.0+ bytes None 

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

Это дает преимущество перед сохранением и загрузкой файлов CSV, поскольку нам не нужно выполнять какие-либо преобразования в DataFrame, поскольку файл рассола сохраняет исходное состояние DataFrame.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как записать все данные в csv файл?

У меня есть два файла у которых я сравниваю id если id одинаковые записываю строки данных в третий файл, в консоле это выглядит вот так:
Скриншот фрагмента кода удалён модератором.

В файл который я записываю результат выглядит вот так:
Скриншот фрагмента кода удалён модератором.

Проблема в том, что в консоле он вывел правильных результат, а в csv файл записал только одну строку данных, а надо все 400

  • Вопрос задан 02 мар. 2023
  • 131 просмотр

1 комментарий

Простой 1 комментарий

TosterModerator

Модератор @TosterModerator

Скриншот фрагмента кода удалён модератором.

Фрагменты кода надо размещать в виде текста и оборачивать тэгом code для корректного отображения. Удобно делать кнопкой
Это обязательно, см.п.3.8 Регламента.
Сюда же относится traceback, ввод и вывод в консоли и другая структурированная текстовая инфа.

Решения вопроса 1

Maksim_64

Data Analyst

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

df.to_csv(r'C:\pythonProject5\my_data.csv',mode='a',header=False)

Это если файл уже существует, если же нет. То первый раз вне цикла один раз запишите пустой csv. c именами ваших колонок.
то есть

columns = df.columns empty_df = pd.DataFrame(columns=columns) empty_df.to_csv(r'C:\pythonProject5\my_data.csv')

и потом как я привел выше будет работать.

Ну а вообще так не делается все собирается в один датафрейм и потом пишется в файл.
ваш псевдо код будет иметь вид

dfs = [] for i in range(длина): Здесь вы сравниваете и создаете датафрефм но вместо записи его в файл добавляете в список dfs.append(df) final_df = pd.concat(dfs,ignore_index=True) final_df.to_csv()

Вот така структура псевдо кода предпочтительнее чем каждый раз писать в файл. Опять же если все храните в файлах и они уже существует то mode=’a’ и header=False. что бы имена колонок не записывал.

Чтение и запись табличных данных в файловую систему — Python: Pandas

Библиотека Pandas разрабатывалась для работы с табличными данными. Популярными типами файлов для их хранения являются:

  • csv — текстовый формат, в котором значения в столбцах отделены друг от друга разделителем, часто запятой
  • xlsx или xls — форматы файлов электронных таблиц Microsoft Excel

Для чтения и записи таблиц в указанные форматы в Pandas существуют специальные методы. О них пойдет речь в этом уроке.

Чтение данных

Начнем работу с продажами в сети из четырех магазинов за одну неделю, которые хранятся в формате csv с запятой в качестве разделителя. Воспользуемся методом read_csv() :

df_orders = pd.read_csv('./data/Shop_orders.csv') print(df_orders.head()) # => Weekday Shop_1 Shop_2 Shop_3 Shop_4 # 0 mon 7 1 7 8 # 1 tue 4 2 4 5 # 2 wed 3 5 2 3 # 3 thu 8 12 8 7 # 4 fri 15 11 13 9 

При чтении данных метод не знает, что считать за индекс в данных, поэтому расставляет индексы самостоятельно. Это возрастающая последовательность целых чисел, которая начинается с нуля. В нашем примере явным индексом является первый столбец — Weekday. Дополним метод параметром index_col с явным указанием номера столбца, который хранит индексы:

df_orders = pd.read_csv('./data/Shop_orders.csv', index_col=0) print(df_orders.head()) # => Shop_1 Shop_2 Shop_3 Shop_4 # Weekday # mon 7 1 7 8 # tue 4 2 4 5 # wed 3 5 2 3 # thu 8 12 8 7 # fri 15 11 13 9 

У разделителя в данных формата csv есть важное значение при чтении. По умолчанию это запятая. Попытка считать данные с разделителем в виде точки с запятой приведет к некорректному чтению. В примере ниже в результате получается пустой DataFrame , в котором индексами стали данные в строках — не то, что хотелось получить:

df_orders = pd.read_csv('./data/Shop_orders_sep.csv', index_col=0) print(df_orders.head()) # => Empty DataFrame # Columns: [] # Index: [mon;7;1;7;8, tue;4;2;4;5, wed;3;5;2;3, thu;8;12;8;7, fri;15;11;13;9] 

Для корректного чтения в данном случае достаточно воспользоваться параметром sep :

df_orders = pd.read_csv('./data/Shop_orders_sep.csv', index_col=0, sep=';') print(df_orders.head()) # => Shop_1 Shop_2 Shop_3 Shop_4 # Weekday # mon 7 1 7 8 # tue 4 2 4 5 # wed 3 5 2 3 # thu 8 12 8 7 # fri 15 11 13 9 

Иногда описание данных может предшествовать началу самих табличных данных. В примере ниже файл начинается со строк:

Попытка прочитать данный файл повлечет ошибку:

df_orders = pd.read_csv('./data/Shop_orders_abstract.csv', index_col=0) print(df_orders.head()) # => ParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 5 

Чтобы пропустить ряд строк с описанием, нужно воспользоваться параметром skiprows . Его значение — это количество опускаемых из рассмотрения первых строк в файле:

df_orders = pd.read_csv('./data/Shop_orders_abstract.csv', index_col=0, skiprows=3) print(df_orders.head()) # => Shop_1 Shop_2 Shop_3 Shop_4 # Weekday # mon 7 1 7 8 # tue 4 2 4 5 # wed 3 5 2 3 # thu 8 12 8 7 # fri 15 11 13 9 

Запись данных

После чтения и трансформации данных результаты могут быть сохранены в файловую систему. Для этого в Pandas есть ряд специальных методов. Для рассматриваемых типов данных это to_csv() и to_excel() :

df_orders.to_csv('./data/Shop_orders_restore.csv') 

В примере выше метод to_csv() позволяет сохранить DataFrame в изначальном виде. Если в качестве индекса сохранить значения, которые присвоены Pandas по умолчанию, то это может мешать дальнейшему чтению и обработке. Также такие индексы не несут важной информации.

У нас есть такие данные:

# => Weekday Shop_1 Shop_2 Shop_3 Shop_4 # 0 mon 7 1 7 8 # 1 tue 4 2 4 5 # 2 wed 3 5 2 3 # 3 thu 8 12 8 7 # 4 fri 15 11 13 9 

Для них с индексами по умолчанию достаточно воспользоваться параметром index , чтобы не сохранять их файл:

df_orders.to_csv('./data/Shop_orders_restore.csv', index=False) 

В команде разработки можно проговорить, что будет использоваться в качестве разделителя в csv-файле. Также это может быть продиктовано совместимостью с другими частями программного продукта. Чтобы задать разделитель, нужно использовать параметр sep :

df_orders.to_csv('./data/Shop_orders_restore_sep.csv', index=False, sep=';') 

Метод to_excel() позволяет сохранять табличные данные в формат MS Excel. Параметризация аналогична методу to_csv() . Меняется только название метода и расширение файла с .csv на .xlsx :

df_orders.to_excel('./data/Shop_orders_restore.xlsx', index=False) 

В некоторых случаях сохранение названий столбцов также можно отключить. Это может потребоваться, когда нужно сохранить значения в ячейках таблицы, или когда названия столбцов не несут дополнительной информации, и не предполагается их использование. Для этого достаточно задать параметр header значением False:

df_orders.to_excel('./data/Shop_orders_restore_noheader.xlsx', index=False, header=False) 

Большие таблицы текстовых данных занимают большой объем. Чтобы уменьшить его, можно создавать архивы методами Pandas. Для этого нужно определить метод сжатия и названия файла в архиве, при этом указать их в виде словаря в параметре compression :

df_orders.to_csv( './data/Shop_orders_restore.zip', index=False, compression='method': 'zip', 'archive_name': 'Shop_orders_restore_archive.csv'> ) 

Выводы

Данные для долгосрочного хранения размещают в виде файлов на жестких дисках. В данном уроке методами библиотеки Pandas выполнялись операции чтения и записи csv и xlsx файлов — наиболее популярных форматов хранения табличных данных.

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

  • Могут использоваться различные варианты разделителей значений в столбцах
  • Строки описания данных могут появляться в шапке таблице
  • Индексы могут храниться не в привычном крайнем левом столбце

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

  • Пропускать первые строки в таблице

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *