Полное руководство: как читать файлы CSV с помощью Pandas
Файлы CSV (значения, разделенные запятыми) являются одним из наиболее распространенных способов хранения данных. К счастью, функция pandas read_csv() позволяет легко читать CSV-файлы в Python практически в любом формате, который вам нужен.
В этом руководстве объясняется несколько способов чтения CSV-файлов в Python с использованием следующего CSV-файла с именем «data.csv» :
playerID,team,points 1,Lakers,26 2,Mavs,19 3,Bucks,24 4,Spurs,22
Пример 1: Чтение CSV-файла в pandas DataFrame
В следующем коде показано, как прочитать файл CSV в DataFrame pandas:
#import CSV file as DataFrame df = pd.read_csv('data.csv') #view DataFrame df playerID team points 0 1 Lakers 26 1 2 Mavs 19 2 3 Bucks 24 3 4 Spurs 22
Пример 2. Чтение определенных столбцов из CSV-файла
Следующий код показывает, как прочитать только столбцы с названиями playerID и points в CSV-файле в pandas DataFrame:
#import only specific columns from CSV file df = pd.read_csv('data.csv', usecols=['playerID', 'points']) #view DataFrame df playerID points 0 1 26 1 2 19 2 3 24 3 4 22
В качестве альтернативы вы можете указать индексы столбцов для чтения в pandas DataFrame:
#import only specific columns from CSV file df = pd.read_csv('data.csv', usecols=[ 0 , 1 ]) #view DataFrame df playerID team 0 1 Lakers 1 2 Mavs 2 3 Bucks 3 4 Spurs
Пример 3. Укажите строку заголовка при импорте файла CSV
В некоторых случаях строка заголовка может быть не первой строкой в CSV-файле. Например, рассмотрим следующий файл CSV, в котором строка заголовка фактически появляется во второй строке:
random,data,values playerID,team,points 1,Lakers,26 2,Mavs,19 3,Bucks,24 4,Spurs,22
Чтобы прочитать этот файл CSV в DataFrame pandas, мы можем указать заголовок = 1 следующим образом:
#import from CSV file and specify that header starts on second row df = pd.read_csv('data.csv', header= 1 ) #view DataFrame df playerID team points 0 1 Lakers 26 1 2 Mavs 19 2 3 Bucks 24 3 4 Spurs 22
Пример 4: Пропустить строки при импорте CSV-файла
Вы также можете легко пропустить строки при импорте CSV-файла, используя аргумент skiprows.Например, следующий код показывает, как пропустить вторую строку при импорте файла CSV:
#import from CSV file and skip second row df = pd.read_csv('data.csv', skiprows=[ 1 ] ) #view DataFrame df playerID team points 0 2 Mavs 19 1 3 Bucks 24 2 4 Spurs 22
А следующий код показывает, как пропустить вторую и третью строку при импорте CSV-файла:
#import from CSV file and skip second and third rows df = pd.read_csv('data.csv', skiprows=[ 1, 2 ] ) #view DataFrame df playerID team points 1 3 Bucks 24 2 4 Spurs 22
Пример 5. Чтение CSV-файлов с настраиваемым разделителем
Иногда у вас может быть файл CSV с разделителем, отличным от запятой. Например, предположим, что в нашем CSV-файле в качестве разделителя используется символ подчеркивания:
playerID_team_points 1_Lakers_26 2_Mavs_19 3_Bucks_24 4_Spurs_22
Чтобы прочитать этот CSV-файл в pandas, мы можем использовать аргумент sep , чтобы указать разделитель, который будет использоваться при чтении файла:
#import from CSV file and specify delimiter to use df = pd.read_csv('data.csv', sep='_') #view DataFrame df playerID team points 0 1 Lakers 26 1 2 Mavs 19 2 3 Bucks 24 3 4 Spurs 22
Вы можете найти полную документацию для функции pandas read_csv() здесь .
Основы Pandas №1 // Чтение файлов, DataFrame, отбор данных
Pandas — одна из самых популярных библиотек Python для аналитики и работы с Data Science. Это как SQL для Python. Все потому, что pandas позволяет работать с двухмерными таблицами данных в Python. У нее есть и масса других особенностей. В этой серии руководств по pandas вы узнаете самое важное (и часто используемое), что необходимо знать аналитику или специалисту по Data Science. Это первая часть, в которой речь пойдет об основах.
Примечание: это практическое руководство, поэтому рекомендуется самостоятельно писать код, повторяя инструкции!
Чтобы разобраться со всем, необходимо…
- Установить Python3.7+, numpy и Pandas.
- Следующий шаг: подключиться к серверу (или локально) и запустить Jupyter. Затем открыть Jupyter Notebook в любимом браузере. Создайте новый ноутбук с именем «pandas_tutorial_1».
- Импортировать numpy и pandas в Jupyter Notebook с помощью двух строк кода:
import numpy as np import pandas as pd
Примечание: к «pandas» можно обращаться с помощью аббревиатуры «pd». Если в конце инструкции с import есть as pd , Jupyter Notebook понимает, что в будущем, при вводе pd подразумевается именно библиотека pandas.
Теперь все настроено! Переходим к руководству по pandas! Первый вопрос:
Как открывать файлы с данными в pandas
Информация может храниться в файлах .csv или таблицах SQL. Возможно, в файлах Excel. Или даже файлах .tsv. Или еще в каком-то другом формате. Но цель всегда одна и та же. Если необходимо анализировать данные с помощью pandas, нужна структура данных, совместимая с pandas.
Структуры данных Python
В pandas есть два вида структур данных: Series и DataFrame.
Series в pandas — это одномерная структура данных («одномерная ndarray»), которая хранит данные. Для каждого значения в ней есть уникальный индекс.

DataFrame — двухмерная структура, состоящая из колонок и строк. У колонок есть имена, а у строк — индексы.

В руководстве по pandas основной акцент будет сделан на DataFrames. Причина проста: с большей частью аналитических методов логичнее работать в двухмерной структуре.
Загрузка файла .csv в pandas DataFrame
Для загрузки .csv файла с данными в pandas используется функция read_csv() .
Начнем с простого образца под названием zoo. В этот раз для практики вам предстоит создать файл .csv самостоятельно. Вот сырые данные:
animal,uniq_id,water_need elephant,1001,500 elephant,1002,600 elephant,1003,550 tiger,1004,300 tiger,1005,320 tiger,1006,330 tiger,1007,290 tiger,1008,310 zebra,1009,200 zebra,1010,220 zebra,1011,240 zebra,1012,230 zebra,1013,220 zebra,1014,100 zebra,1015,80 lion,1016,420 lion,1017,600 lion,1018,500 lion,1019,390 kangaroo,1020,410 kangaroo,1021,430 kangaroo,1022,410
Вернемся во вкладку “Home” https://you_ip:you_port/tree Jupyter для создания нового текстового файла…

затем скопируем данные выше, чтобы вставить информацию в этот текстовый файл…

…и назовем его zoo.csv!

Это ваш первый .csv файл.
Вернемся в Jupyter Notebook (который называется «pandas_tutorial_1») и откроем в нем этот .csv файл!
Для этого нужна функция read_csv()
Введем следующее в новую строку:
pd.read_csv('zoo.csv', delimiter=',')

Готово! Это файл zoo.csv , перенесенный в pandas. Это двухмерная таблица — DataFrame. Числа слева — это индексы. А названия колонок вверху взяты из первой строки файла zoo.csv.
На самом деле, вам вряд ли придется когда-нибудь создавать .csv файл для себя, как это было сделано в примере. Вы будете использовать готовые файлы с данными. Поэтому нужно знать, как загружать их на сервер!
Вот небольшой набор данных: ДАННЫЕ
Если кликнуть на ссылку, файл с данными загрузится на компьютер. Но он ведь не нужен вам на ПК. Его нужно загрузить на сервер и потом в Jupyter Notebook. Для этого нужно всего два шага.
Шаг 1) Вернуться в Jupyter Notebook и ввести эту команду:
!wget https://pythonru.com/downloads/pandas_tutorial_read.csv
Это загрузит файл pandas_tutorial_read.csv на сервер. Проверьте:

Если кликнуть на него…

…можно получить всю информацию из файла.
Шаг 2) Вернуться в Jupyter Notebook и использовать ту же функцию read_csv (не забыв поменять имя файла и значение разделителя):
pd.read_csv('pandas_tutorial_read.csv', delimete=';')
Данные загружены в pandas!

Что-то не так? В этот раз не было заголовка, поэтому его нужно настроить самостоятельно. Для этого необходимо добавить параметры имен в функцию!
pd.read_csv('pandas_tutorial_read.csv', delimiter=';', names=['my_datetime', 'event', 'country', 'user_id', 'source', 'topic'])

Так лучше!
Теперь файл .csv окончательно загружен в pandas DataFrame .
Примечание: есть альтернативный способ. Вы можете загрузить файл .csv через URL напрямую. В этом случае данные не загрузятся на сервер данных.
pd.read_csv( 'https://pythonru.com/downloads/pandas_tutorial_read.csv', delimiter=';', names=['my_datetime', 'event', 'country', 'user_id', 'source', 'topic'] )
Примечание: если вам интересно, что в этом наборе, то это лог данных из блога о путешествиях. Ну а названия колонок говорят сами за себя.
Отбор данных из dataframe в pandas
Это первая часть руководства, поэтому начнем с самых простых методов отбора данных, а уже в следующих углубимся и разберем более сложные.
Вывод всего dataframe
Базовый метод — вывести все данные из dataframe на экран. Для этого не придется запускать функцию pd.read_csv() снова и снова. Просто сохраните денные в переменную при чтении!
article_read = pd.read_csv( 'pandas_tutorial_read.csv', delimiter=';', names = ['my_datetime', 'event', 'country', 'user_id', 'source', 'topic'] )
После этого можно будет вызывать значение article_read каждый раз для вывода DataFrame!

Вывод части dataframe
Иногда удобно вывести не целый dataframe, заполнив экран данными, а выбрать несколько строк. Например, первые 5 строк можно вывести, набрав:
article_read.head()

Или последние 5 строк:
article_read.tail()

Или 5 случайных строк:
article_read.sample(5)

Вывод определенных колонок из dataframe
А это уже посложнее! Предположим, что вы хотите вывести только колонки «country» и «user_id».
Для этого нужно использовать команду в следующем формате:
article_read[['country', 'user_id']]

Есть предположения, почему здесь понадобились двойные квадратные скобки? Это может показаться сложным, но, возможно, так удастся запомнить: внешние скобки сообщают pandas, что вы хотите выбрать колонки, а внутренние — список (помните? Списки в Python указываются в квадратных скобках) имен колонок.
Поменяв порядок имен колонов, изменится и результат вывода.
Это DataFrame выбранных колонок.
Примечание: иногда (особенно в проектах аналитического прогнозирования) нужно получить объекты Series вместе DataFrames. Это можно сделать с помощью одного из способов:
- article_read.user_id
- article_read[‘user_id’]

Фильтрация определенных значений в dataframe
Если прошлый шаг показался сложным, то этот будет еще сложнее!
Предположим, что вы хотите сохранить только тех пользователей, которые представлены в источнике «SEO». Для этого нужно отфильтровать по значению «SEO» в колонке «source»:
article_read[article_read.source == 'SEO']
Важно понимать, как pandas работает с фильтрацией данных:
Шаг 1) В первую очередь он оценивает каждую строчку в квадратных скобках: является ли ‘SEO’ значением колонки article_read.source ? Результат всегда будет булевым значением ( True или False ).

Шаг 2) Затем он выводит каждую строку со значением True из таблицы article_read .

Выглядит сложно? Возможно. Но именно так это и работает, поэтому просто выучите, потому что пользоваться этим придется часто!
Функции могут использоваться одна за другой
Важно понимать, что логика pandas очень линейна (как в SQL, например). Поэтому если вы применяете функцию, то можете применить другую к ней же. В таком случае входящие данные последней функции будут выводом предыдущей.
Например, объединим эти два метода перебора:
article_read.head()[['country', 'user_id']]
Первая строчка выбирает первые 5 строк из набора данных. Потом она выбирает колонки «country» и «user_id».
Можно ли получить тот же результат с иной цепочкой функций? Конечно:
article_read[['country', 'user_id']].head()
В этом случае сначала выбираются колонки, а потом берутся первые 5 строк. Результат такой же — порядок функций (и их исполнение) отличается.
А что будет, если заменить значение «article_read» на оригинальную функцию read_csv():
pd.read_csv( 'pandas_tutorial_read.csv', delimiter=';', names = ['my_datetime', 'event', 'country', 'user_id', 'source', 'topic'] )[['country', 'user_id']].head()
Так тоже можно, но это некрасиво и неэффективно. Важно понять, что работа с pandas — это применение функций и методов один за одним, и ничего больше.
Проверьте себя!
Как обычно, небольшой тест для проверки! Выполните его, чтобы лучше запомнить материал!
Выберите used_id , country и topic для пользователей из country_2 . Выведите первые 5 строк!
А вот и решение!
Его можно преподнести одной строкой:
article_read[article_read.country == 'country_2'][['user_id','topic', 'country']].head()
Или, чтобы было понятнее, можно разбить на несколько строк:
ar_filtered = article_read[article_read.country == 'country_2'] ar_filtered_cols = ar_filtered[['user_id','topic', 'country']] ar_filtered_cols.head()
В любом случае, логика не отличается. Сначала берется оригинальный dataframe ( article_read ), затем отфильтровываются строки со значением для колонки country — country_2 ( [article_read.country == ‘country_2’] ). Потому берутся три нужные колонки ( [[‘user_id’, ‘topic’, ‘country’]] ) и в конечном итоге выбираются только первые пять строк ( .head() ).
Итого
Вот и все. В следующей статье вы узнаете больше о разных методах агрегации (например, sum, mean, max, min) и группировки.
Python Импорт данных №2. Импорт CSV
В этом уроке мы научимся импортировать данные из файла в формате CSV.
В нашем случае мы будем импортировать данные не из классического файла CSV, где данные разделены запятыми, а из CSV, где данные разделены точкой с запятой.
Помимо импорта мы еще преобразуем столбец, в котором нужно данные разделить на строки.
Решение
Для импорта данных из CSV мы воспользуемся командой pandas.read_csv. В параметрах мы укажем разделитель, а также укажем в каких столбцах находятся даты.
Для того, чтобы разделить столбец на строки мы воспользуемся функциями split, stack, strip.
Результат запишем в файл xlsx с помощью команды pandas.to_excel.
Примененные функции
- pandas.read_csv
- pandas.Series.str.split
- pandas.DataFrame.stack
- pandas.DataFrame
- pandas.DataFrame.drop
- pandas.DataFrame.join
Код
data = pd.read_csv('crm_data.csv', sep=';', parse_dates=['Дата и время', 'Дата доставки'])
Разбить столбец состав на строки
composition = data['Состав'].str.split(';', expand=True).stack().str.strip().reset_index(level=1, drop=True) composition = pd.DataFrame(composition, columns=['Состав_'])
Объединить старый датафрейм с преобразованным столбцом
crm = data.drop(['Состав'], axis=1).join(composition)
Записать полученный датафрейм в файл XLSX
crm.to_excel('crm.xlsx', sheet_name='crm', index=False)
Курс Импорт данных в Python
| Номер урока | Урок | Описание |
|---|---|---|
| 1 | Python Импорт данных №1. Импорт Excel | Научимся импортировать данные из книг MS Excel в формате xlsx. |
| 2 | Python Импорт данных №2. Импорт CSV | Научимся импортировать данные из текстовых файлов CSV. |
| 3 | Python Импорт данных №3. Импорт с веб-сайта (HTML) | Импортируем таблицу с веб-страницы и запишем результат в CSV файл. |
| 4 | Python Импорт данных №4. Импорт таблиц XML | Научимся импортировать таблицы XML на примере данных с сайта Банка России. |
| 5 | Python Импорт данных №5. Импорт таблиц из PDF | Научимся импортировать нужные таблицы из PDF файлов, объединять их по вертикали в одну большую таблицу и записывать результат в CSV файл. |
| 6 | Python Импорт данных №6. Импорт таблиц из Word | Научимся импортировать таблицы из документов MS Word в формате docx. |
| 7 | Python Импорт данных №7. Импорт таблиц из Word | В этом уроке мы извлечем таблицу из документа Word и запишем ее в файл CSV. Для этого нам понадобится модули python-docx и pandas. |
Загрузка данных из CSV в Pandas DataFrame
Чтобы загрузить данные в Pandas DataFrame из файла CSV, используйте функцию pandas.read_csv().
В этом руководстве мы изучим различные скрипты, возникающие при загрузке данных из CSV в Pandas DataFrame.
Пример 1
В этом примере мы берем следующий CSV-файл и загружаем его в DataFrame с помощью метода pandas.read_csv().
name,physics,chemistry,algebra Somu,68,84,78 Kiku,74,56,88 Amol,77,73,82 Lini,78,69,87
import pandas as pd #load dataframe from csv df = pd.read_csv("data.csv") #print dataframe print(df)
name physics chemistry algebra 0 Somu 68 84 78 1 Kiku 74 56 88 2 Amol 77 73 82 3 Lini 78 69 87
Первая строка в CSV-файле используется как имена столбцов, а остальные – как строки DataFrame.
Пример 2: с определенным разделителем
Если вы используете другой разделитель для различения элементов в ваших данных, вы можете указать этот разделитель для функции read_csv() с помощью аргумента разделителя.
Рассмотрим следующий файл csv. В этом CSV-файле разделителем является пробел.
name physics chemistry algebra Somu 68 84 78 Kiku 74 56 88 Amol 77 73 82 Lini 78 69 87
Теперь мы предоставим разделитель в качестве пробела для функции read_csv().
import pandas as pd #load dataframe from csv df = pd.read_csv('data.csv', delimiter=' ') #print dataframe print(df)
name physics chemistry algebra 0 Somu 68 84 78 1 Kiku 74 56 88 2 Amol 77 73 82 3 Lini 78 69 87
Загрузить из CSV без заголовка
- Передайте аргумент header = None функции pandas.read_csv().
- Передайте имена аргументов функции pandas.read_csv(), которая неявно делает header = None.
import pandas as pd # using header argument df = pd.read_csv('data.csv', header=None) # using names argument df1 = pd.read_csv('data.csv', names=list_of_column_names)
В этом руководстве по Pandas мы узнали, как загружать данные из файла CSV в Pandas DataFrame.
