Функция pd.ead_csv() в Pandas
read_csv()является наиболее часто используемой функцией чтения данных в библиотеке pandas, используется для чтения данных из файлов CSV (значения, разделённые запятыми) и создания DataFrame.
Файлы CSV — это простой и широко используемый формат обмена данными, который хранит табличные данные в виде простого текста, где каждая строка представляет запись, а поля разделены запятыми.read_csv()Он способен интеллектуально разбирать CSV-файлы, автоматически распознавать имена столбцов и типы данных, а также обрабатывать различные проблемы с разделителями и кодировкой.
Базовый синтаксис и параметры
Формат синтаксиса
pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',
names=None, index_col=None, usecols=None, dtype=None,
skiprows=None, nrows=None, na_values=None, ...)
Описание параметра
| Параметр | Type | Описание | Значение по умолчанию |
|---|---|---|---|
| filepath_or_buffer | str, объект path или файлоподобный объект | Путь, URL или файловый объект CSV-файла | Обязательный |
| sep | str | Разделитель полей, по умолчанию для CSV — запятая | ',' |
| header | int, список int, 'infer' | Номер строки, используемой как имена столбцов; 0 означает первую строку | 'infer' |
| names | спископодобный | Пользовательский список имён столбцов | Отсутствует |
| index_col | int, str, список int, список str, False | Столбец, используемый в качестве индекса строк | Отсутствует |
| usecols | спископодобный, вызываемый | Читать только указанные столбцы | Отсутствует |
| dtype | dict | Типы данных для указанных столбцов, например, {'a': np.float64} | Отсутствует |
| skiprows | спископодобный, int | Пропустить указанные строки | Отсутствует |
| nrows | int | Читать только первые n строк | Отсутствует |
| na_values | скаляр, str, спископодобный, dict | Значения, распознаваемые как NA/NaN | Отсутствует |
| encoding | str | Кодировка файла, например, 'utf-8' | Отсутствует |
Возвращаемое значение
- Тип возвращаемого значения:
pd.DataFrame - Возвращает двумерную размеченную структуру данных, т.е. pandas DataFrame, над которой можно выполнять различные операции анализа и обработки данных.
Примеры
С помощью следующих примеров полностью освойтеread_csv()различные варианты использования.
Пример 1: Чтение локального CSV-файла
Сначала создайте простой CSV-файл, а затем используйтеread_csv()чтобы прочитать его.
Пример
# Создайте пример CSV-файла
# Сначала запишите тестовые данные
data = """name,age,city,salary
Tom,28,Beijing,8000
Jerry,35,Shanghai,12000
Mike,42,Guangzhou,15000
Lucy,26,Shenzhen,7000
"""
# Записать данные в файл (в реальном использовании можно сразу прочитать существующий файл)
with open('employees.csv', 'w', encoding='utf-8') as f:
f.write(data)
# Используйте read_csv для чтения CSV-файла
# filepath_or_buffer: путь к файлу (обязательный)
df = pd.read_csv('employees.csv')
# Просмотреть результат чтения
print("Прочитанный DataFrame:")
print(df)
print("\nТипы данных:")
print(df.dtypes)
print("\nИмена столбцов:", df.columns.tolist())
Ожидаемый вывод:
读取的 DataFrame:
name age city salary
0 Tom 28 Beijing 8000
1 Jerry 35 Shanghai 12000
2 Mike 42 Guangzhou 15000
3 Lucy 26 Shenzhen 7000
数据类型:
name object
age int64
city object
salary int64
列名: ['name', 'age', 'city', 'salary']
Пояснение к коду:
pd.read_csv('employees.csv')— это самый базовый вариант использования; просто передайте путь к файлу напрямую.- По умолчанию первая строка автоматически распознаётся как имена столбцов (header='infer').
- pandas автоматически определяет тип данных каждого столбца: строки становятся object, а целые числа — int64.
- Возвращённый DataFrame можно напрямую использовать с
print()для просмотра, а также можно выполнить последующий анализ данных.
Пример 2: Пользовательские имена столбцов и выбор конкретных столбцов
В реальной работе нам может понадобиться настроить имена столбцов или прочитать только некоторые столбцы для повышения производительности.
Пример
# Создание тестовых данных
data = """name,age,city,salary,department
Tom,28,Beijing,8000,IT
Jerry,35,Shanghai,12000,HR
Mike,42,Guangzhou,15000,Sales
Lucy,26,Shenzhen,7000,IT
"""
with open('employees2.csv', 'w', encoding='utf-8') as f:
f.write(data)
# Пример 2a: Пользовательские имена столбцов
# Параметр names используется для указания новых имён столбцов, которые переопределят имена столбцов в исходном файле
df_custom = pd.read_csv('employees2.csv', names=['Name', 'Age', 'City', 'Salary', 'Department'], header=0)
print("DataFrame после пользовательских имён столбцов:")
print(df_custom)
print()
# Пример 2b: Читать только указанные столбцы
# Параметр usecols позволяет указать, какие столбцы читать, что повышает производительность
df_partial = pd.read_csv('employees2.csv', usecols=['name', 'salary'])
print("Чтение только некоторых столбцов:")
print(df_partial)
print()
# Пример 2c: Использование index_col для указания столбца индекса
df_indexed = pd.read_csv('employees2.csv', index_col='name')
print("Установить name как индекс:")
print(df_indexed)
Ожидаемый вывод:
自定义列名后的 DataFrame:
姓名 年龄 城市 薪资 部门
0 Tom 28 Beijing 8000 IT
1 Jerry 35 Shanghai 12000 HR
2 Mike 42 Guangzhou 15000 Sales
3 Lucy 26 Shenzhen 7000 IT
只读取部分列:
name salary
0 Tom 8000
1 Jerry 12000
2 Mike 15000
3 Lucy 7000
设置 name 为索引:
age city salary department
name
Tom 28 Beijing 8000 IT
Jerry 35 Shanghai 12000 HR
Mike 42 Guangzhou 15000 Sales
Lucy 26 Shenzhen 7000 IT
Пояснение к коду:
namesПараметр должен соответствовать количеству столбцов в данных. Если в файле есть строка заголовка, можно задатьheader=0чтобы использовать исходный заголовок.usecolsМожно передать список имён столбцов (рекомендуется) или список индексов столбцов; порядок возвращаемых столбцов соответствует указанному порядку.index_colЕсли задать столбец в качестве индекса строк, позже будет проще быстро запрашивать данные по индексу.
Пример 3: обработка особых данных и улучшение обработки пропущенных значений
CSV-файлы могут содержать пропущенные значения, особые разделители или ситуации, когда некоторые строки нужно пропустить.
Пример
# Создать CSV-файл, содержащий особые данные
# Использовать точку с запятой в качестве разделителя, с пропущенными значениями и значениями NA
data = """name;age;city;salary
Том;28;Пекин;8000
Джерри;;Шанхай;12000
Mike;42;Guangzhou;
Lucy;26;NA;7000
"""
with open('employees3.csv', 'w', encoding='utf-8') as f:
f.write(data)
# Пример 3a: Чтение файла, разделённого точкой с запятой
df_semicolon = pd.read_csv('employees3.csv', sep=';')
print("Использование разделителя-точки с запятой:")
print(df_semicolon)
print("Статистика пропущенных значений:")
print(df_semicolon.isnull())
print()
# Пример 3b: Укажите, какие значения считать пропущенными
df_na = pd.read_csv('employees3.csv', sep=';', na_values=['NA', 'missing'])
print("После пользовательских значений NA:")
print(df_na)
print()
# Пример 3c: Пропуск строк и ограничение количества прочитанных строк
# Предположим, что первые несколько строк файла являются комментариями и их можно пропустить
data_with_comment = """# Это файл данных сотрудников
# Дата создания: 2024-01-01
name;age;city;salary
Том;28;Пекин;8000
Jerry;35;Shanghai;12000
Mike;42;Guangzhou;15000
Lucy;26;Shenzhen;7000
"""
with open('employees4.csv', 'w', encoding='utf-8') as f:
f.write(data_with_comment)
# skiprows пропускает первые две строки (строки комментариев)
df_skip = pd.read_csv('employees4.csv', sep=';', skiprows=2)
print("После пропуска строк комментариев:")
print(df_skip)
print()
# nrows читает только первые 3 строки
df_nrows = pd.read_csv('employees4.csv', sep=';', skiprows=2, nrows=3)
print("Чтение только первых 3 строк:")
print(df_nrows)
Ожидаемый вывод:
使用分号分隔符:
name age city salary
0 Tom 28.0 Beijing 8000.0
1 Jerry NaN Shanghai 12000.0
2 NaN 42.0 Guangzhou NaN
3 Lucy 26.0 NA 7000.0
缺失值统计:
name age city salary
0 False False False False
1 False True False False
2 True False False True
3 False False False False
自定义 NA 值后:
name age city salary
0 Tom 28.0 Beijing 8000.0
1 Jerry NaN Shanghai 12000.0
2 NaN 42.0 Guangzhou NaN
3 Lucy 26.0 NaN 7000.0
跳过注释行后:
name age city salary
0 Tom 28 Beijing 8000
1 Jerry 35 Shanghai 12000
42 Guangzhou 15000
2 Mike
3 Lucy 26 Shenzhen 7000
只读取前3行:
name age city salary
0 Tom 28 Beijing 800本地
1 Jerry 35 Shanghai 12000
2 Mike 42 Guangzhou 15000
Пояснение к коду:
sepПараметр может задавать любой разделитель, например точку с запятой, табуляцию и т. д.- По умолчанию пустые строки, пробелы и т. д. распознаются как пропущенные значения. Вы можете использовать
na_valuesпараметр, чтобы настроить значения, рассматриваемые как NA. skiprowsВы можете пропустить указанное количество строк в начале файла, что удобно для обработки файлов с комментариями.nrowsОграничивает количество прочитанных строк, подходит для чтения больших файлов по частям.
Примечания
- При чтении больших файлов можно рассмотреть использование
chunksizeпараметра для чтения по частям, чтобы избежать нехватки памяти. - При обработке файлов на китайском языке необходимо правильно указать
encodingпараметр. Распространённые кодировки включают 'utf-8', 'gbk', 'gb2312' и т. д. - Если в CSV-файле нет строки заголовка, нужно задать
header=None, а затем использоватьnamesпараметр для указания имён столбцов. - Для нестандартных CSV-файлов может потребоваться настроить
sep、quotecharи другие параметры для их корректного разбора.
Итог
read_csv()— это самая базовая и самая важная функция чтения данных в pandas. Она мощная и поддерживает такие расширенные возможности, как несколько разделителей, пользовательские имена столбцов, настройка индекса и обработка пропущенных значений.
В практической работе по анализу данных освоениеread_csv()различных вариантов использования параметров позволяет эффективно обрабатывать CSV-файлы различных форматов, закладывая прочную основу для последующей очистки и анализа данных. Читателям рекомендуется больше практиковаться и хорошо освоить эти распространённые параметры.
Pandas: общие функции