- Rukovodstvo
- статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
- Чтение и запись файлов CSV на Python с помощью Pandas
- Хотя вы можете читать и писать файлы CSV в Python, используя встроенную функцию open () или специальный модуль csv [https://docs.python.org/3/library/csv.html], вы также можете использовать Pandas . В этой статье вы увидите, как использовать библиотеку Python Pandas [https://pandas.pydata.org/] для чтения и записи файлов CSV. Что такое файл CSV? Давайте быстро напомним, что такое файл CSV — не что иное, как простой текстовый файл с соблюдением нескольких соглашений о форматировании. Однако это наиболее распространенный, простой и легкий
- Что такое файл CSV?
- Чтение и запись файлов CSV с помощью Pandas
- Установка Pandas
- Чтение файлов CSV с помощью read_csv ()
- Настройка заголовков
- Пропуск строк при чтении CSV
- Удаление заголовков
- Указание разделителей
- Запись файлов CSV с помощью to_csv ()
- Настройка заголовков
- Настройка разделителя
- Обработка отсутствующих значений
- Заключение
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Чтение и запись файлов CSV на Python с помощью Pandas
Хотя вы можете читать и писать файлы CSV в Python, используя встроенную функцию open () или специальный модуль csv [https://docs.python.org/3/library/csv.html], вы также можете использовать Pandas . В этой статье вы увидите, как использовать библиотеку Python Pandas [https://pandas.pydata.org/] для чтения и записи файлов CSV. Что такое файл CSV? Давайте быстро напомним, что такое файл CSV — не что иное, как простой текстовый файл с соблюдением нескольких соглашений о форматировании. Однако это наиболее распространенный, простой и легкий
Хотя вы можете читать и писать файлы CSV в Python, используя встроенную open() или специальный модуль csv, вы также можете использовать Pandas.
В этой статье вы увидите, как использовать библиотеку Python Pandas для чтения и записи файлов CSV.
Что такое файл CSV?
Давайте быстро напомним, что такое файл CSV — не что иное, как простой текстовый файл с соблюдением нескольких соглашений о форматировании. Однако это наиболее распространенный, простой и легкий способ хранения табличных данных. Этот формат упорядочивает таблицы в соответствии с определенной структурой, разделенной на строки и столбцы. Именно в этих строках и столбцах содержатся ваши данные.
Новая строка завершает каждую строку, чтобы начать следующую строку. Точно так же разделитель, обычно запятая, разделяет столбцы в каждой строке.
Например, у нас может быть таблица, которая выглядит так:
| City | State | Capital | Population | | ------------ | ------------ | ------- | ------------- | | Philadelphia | Pennsylvania | No | 1.581 Million | | Sacramento | California | Yes | 0.5 Million | | New York | New York | No | 8.623 Million | | Austin | Texas | Yes | 0.95 Million | | Miami | Florida | No | 0.463 Million |
Если бы мы преобразовали его в формат CSV, это выглядело бы так:
City,State,Capital,Population Philadelphia,Pennsylvania,No,1.581 Million Sacramento,California,Yes,0.5 Million New York,New York,No,8.623 Million Austin,Texas,Yes,0.95 Million Miami,Florida,No,0.463 Million
Хотя имя (значения, разделенные запятыми) по своей сути использует запятую в качестве разделителя, вы также можете использовать другие разделители (разделители), такие как точка с запятой ( ; ). Каждая строка таблицы — это новая строка файла CSV, и это очень компактный и лаконичный способ представления табличных данных.
Теперь давайте посмотрим на read_csv() .
Чтение и запись файлов CSV с помощью Pandas
Pandas — очень мощный и популярный фреймворк для анализа и обработки данных. Одной из самых ярких особенностей Pandas является его способность читать и записывать различные типы файлов, включая CSV и Excel. Вы можете эффективно и легко управлять CSV-файлами в Pandas, используя такие функции, как read_csv() и to_csv() .
Установка Pandas
Мы должны установить Pandas перед его использованием. Давайте использовать pip :
Чтение файлов CSV с помощью read_csv ()
Давайте импортируем Titanic Dataset, который можно получить на GitHub :
import pandas as pd titanic_data = pd.read_csv('titanic.csv')
Pandas будет искать этот файл в каталоге сценария, естественно, и мы просто указываем путь к файлу, который хотим проанализировать, как единственный обязательный аргумент этого метода.
Давайте посмотрим на head() этого набора данных, чтобы убедиться, что он импортирован правильно:
PassengerId Survived Pclass . Fare Cabin Embarked 0 1 0 3 . 7.2500 NaN S 1 2 1 1 . 71.2833 C85 C 2 3 1 3 . 7.9250 NaN S 3 4 1 1 . 53.1000 C123 S 4 5 0 3 . 8.0500 NaN S
Кроме того, вы также можете читать файлы CSV с сетевых ресурсов, таких как GitHub, просто передав URL-адрес ресурса в read_csv() . Давайте прочитаем этот же CSV-файл из репозитория GitHub, не загружая его сначала на локальный компьютер:
import pandas as pd titanic_data = pd.read_csv(r'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv') print(titanic_data.head())
PassengerId Survived Pclass . Fare Cabin Embarked 0 1 0 3 . 7.2500 NaN S 1 2 1 1 . 71.2833 C85 C 2 3 1 3 . 7.9250 NaN S 3 4 1 1 . 53.1000 C123 S 4 5 0 3 . 8.0500 NaN S [5 rows x 12 columns]
Настройка заголовков
По умолчанию метод read_csv() использует первую строку файла CSV в качестве заголовков столбцов. Иногда у этих заголовков могут быть странные имена, и вы можете использовать свои собственные заголовки. Вы можете установить заголовки либо после чтения файла, просто присвоив columns области в DataFrame экземпляре другого список, или вы можете установить заголовки при чтении CSV в первую очередь.
Давайте определим список имен столбцов и будем использовать эти имена вместо имен из CSV-файла:
import pandas as pd col_names = ['Id', 'Survived', 'Passenger Class', 'Full Name', 'Gender', 'Age', 'SibSp', 'Parch', 'Ticket Number', 'Price', 'Cabin', 'Station'] titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', names=col_names) print(titanic_data.head())
Id Survived Passenger Class . Price Cabin Station 0 PassengerId Survived Pclass . Fare Cabin Embarked 1 1 0 3 . 7.25 NaN S 2 2 1 1 . 71.2833 C85 C 3 3 1 3 . 7.925 NaN S 4 4 1 1 . 53.1 C123 S
Хм, теперь у нас есть собственные заголовки, но первая строка файла CSV, которая изначально использовалась для установки имен столбцов, также включена в DataFrame . Мы хотим пропустить эту строку, поскольку она больше не представляет для нас никакой ценности.
Пропуск строк при чтении CSV
skiprows эту проблему, используя аргумент skiprows:
import pandas as pd col_names = ['Id', 'Survived', 'Passenger Class', 'Full Name', 'Gender', 'Age', 'SibSp', 'Parch', 'Ticket Number', 'Price', 'Cabin', 'Station'] titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', names=col_names, skiprows=[0]) print(titanic_data.head())
Теперь давайте запустим этот код:
Id Survived Passenger Class . Price Cabin Station 0 1 0 3 . 7.2500 NaN S 1 2 1 1 . 71.2833 C85 C 2 3 1 3 . 7.9250 NaN S 3 4 1 1 . 53.1000 C123 S 4 5 0 3 . 8.0500 NaN S
Работает как шарм! skiprows принимает список строк, которые вы хотите пропустить. Вы можете пропустить, например, 0, 4, 7 если хотите:
titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', names=col_names, skiprows=[0, 4, 7]) print(titanic_data.head(10))
В результате DataFrame , в котором нет некоторых из строк, которые мы видели раньше:
Id Survived Passenger Class . Price Cabin Station 0 1 0 3 . 7.2500 NaN S 1 2 1 1 . 71.2833 C85 C 2 3 1 3 . 7.9250 NaN S 3 5 0 3 . 8.0500 NaN S 4 6 0 3 . 8.4583 NaN Q 5 8 0 3 . 21.0750 NaN S 6 9 1 3 . 11.1333 NaN S 7 10 1 2 . 30.0708 NaN C 8 11 1 3 . 16.7000 G6 S 9 12 1 1 . 26.5500 C103 S
Имейте в виду, что пропуск строк происходит до того, как DataFrame будет полностью сформирован, поэтому вы не пропустите никаких индексов самого DataFrame , хотя в этом случае вы можете увидеть, что Id (импортированное из файла CSV) отсутствует ID 4 и 7 .
Удаление заголовков
Вы также можете решить полностью удалить заголовок, что приведет к DataFrame который просто имеет 0. n столбцов заголовка, установив для аргумента header None :
titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', header=None, skiprows=[0])
Вы также захотите пропустить здесь первую строку, поскольку в противном случае значения из первой строки будут фактически включены в первую строку:
0 1 2 3 4 . 7 8 9 0 1 0 3 Braund, Mr. Owen Harris male . 0 A/5 21171 7.2500 1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th. female . 0 PC 17599 71.2833 2 3 1 3 Heikkinen, Miss. Laina female . 0 STON/O2. 3101282 7.9250 3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female . 0 113803 53.1000 4 5 0 3 Allen, Mr. William Henry male . 0 373450 8.0500
Указание разделителей
Как было сказано ранее, вы, вероятно, столкнетесь с CSV-файлом, в котором для разделения данных на самом деле не используются запятые. В таких случаях вы можете использовать sep для указания других разделителей:
titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', sep=';')
Запись файлов CSV с помощью to_csv ()
Опять же, DataFrame являются табличными. Превратить DataFrame в файл CSV так же просто, как преобразовать файл CSV в DataFrame — мы вызываем write_csv() в экземпляре DataFrame
При записи DataFrame в файл CSV вы также можете изменить имена столбцов с помощью columns или указать разделитель с помощью аргумента sep Если вы не укажете ни один из них, вы получите стандартный файл значений, разделенных запятыми.
Давайте поиграемся с этим:
import pandas as pd cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State']) cities.to_csv('cities.csv')
Здесь мы создали простой DataFrame с двумя городами и их соответствующими состояниями. Затем мы сохранили эти данные в файл CSV, используя to_csv() и указав имя файла.
В результате в рабочем каталоге выполняемого вами скрипта создается новый файл, который содержит:
,City,State 0,Sacramento,California 1,Miami,Florida
Хотя это не совсем хорошо отформатировано. У нас все еще есть индексы из DataFrame , который также ставит странное пропущенное место перед именами столбцов. Если мы повторно импортируем этот CSV- DataFrame обратно в DataFrame, это будет беспорядок:
df = pd.read_csv('cities.csv') print(df)
Unnamed: 0 City State 0 0 Sacramento California 1 1 Miami Florida
Индексы из DataFrame превратились в новый столбец, который теперь называется Unnamed .
При сохранении файла, давайте удостоверимся , что уронить индекс DataFrame :
import pandas as pd cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State']) cities.to_csv('cities.csv', index=False)
Теперь это приводит к файлу, который содержит:
City,State Sacramento,California Miami,Florida
Работает как шарм! Если мы повторно импортируем его и распечатаем содержимое, DataFrame будет построен правильно:
df = pd.read_csv('cities.csv') print(df)
City State 0 Sacramento California 1 Miami Florida
Настройка заголовков
Давайте изменим заголовки столбцов с заголовков по умолчанию:
import pandas as pd cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State']) new_column_names = ['City_Name', 'State_Name'] cities.to_csv('cities.csv', index=False, header=new_column_names)
Мы new_header список new_header, который содержит разные значения для наших столбцов. Затем, используя header , мы установили их вместо исходных имен столбцов. Будет создан cities.csv с таким содержимым:
City_Name,State_Name Sacramento,California Miami,Florida Washington DC,Unknown
Настройка разделителя
Давайте изменим разделитель со значения по умолчанию ( , ) на новый:
import pandas as pd cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State']) cities.to_csv('cities.csv', index=False, sep=';')
В результате cities.csv файл cities.csv, содержащий:
City;State Sacramento;California Miami;Florida
Обработка отсутствующих значений
Иногда в DataFrame отсутствуют значения, которые мы оставили как NaN или NA . В таких случаях вы можете отформатировать их при записи в файл CSV. Вы можете использовать na_rep и установить значение, которое будет помещено вместо отсутствующего значения:
import pandas as pd cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida'], ['Washington DC', pd.NA]], columns=['City', 'State']) cities.to_csv('cities.csv', index=False, na_rep='Unknown')
Здесь у нас есть две допустимые пары город-государство, но Washington DC имеет своего штата. Если мы запустим этот код, это приведет к созданию cities.csv следующего содержания:
City,State Sacramento,California Miami,Florida Washington DC,Unknown
Заключение
В статье показано, как читать и записывать файлы CSV с помощью библиотеки Python Pandas. Для чтения файла CSV используется метод read_csv() библиотеки Pandas. Вы также можете передать пользовательские имена заголовков при чтении CSV файлов через names атрибута read_csv() метод. Наконец, для записи в файл CSV с помощью панд, вы должны сначала создать объект Панды DataFrame , а затем вызвать to_csv метод на DataFrame.
Licensed under CC BY-NC-SA 4.0