Функция pd.ead_csv() в Pandas

Python math 模块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_bufferstr, объект path или файлоподобный объектПуть, URL или файловый объект CSV-файлаОбязательный
sepstrРазделитель полей, по умолчанию для CSV — запятая','
headerint, список int, 'infer'Номер строки, используемой как имена столбцов; 0 означает первую строку'infer'
namesспископодобныйПользовательский список имён столбцовОтсутствует
index_colint, str, список int, список str, FalseСтолбец, используемый в качестве индекса строкОтсутствует
usecolsспископодобный, вызываемыйЧитать только указанные столбцыОтсутствует
dtypedictТипы данных для указанных столбцов, например, {'a': np.float64}Отсутствует
skiprowsспископодобный, intПропустить указанные строкиОтсутствует
nrowsintЧитать только первые n строкОтсутствует
na_valuesскаляр, str, спископодобный, dictЗначения, распознаваемые как NA/NaNОтсутствует
encodingstrКодировка файла, например, 'utf-8'Отсутствует

Возвращаемое значение

  • Тип возвращаемого значения:pd.DataFrame
  • Возвращает двумерную размеченную структуру данных, т.е. pandas DataFrame, над которой можно выполнять различные операции анализа и обработки данных.

Примеры

С помощью следующих примеров полностью освойтеread_csv()различные варианты использования.

Пример 1: Чтение локального CSV-файла

Сначала создайте простой CSV-файл, а затем используйтеread_csv()чтобы прочитать его.

Пример

import pandas as pd

# Создайте пример 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: Пользовательские имена столбцов и выбор конкретных столбцов

В реальной работе нам может понадобиться настроить имена столбцов или прочитать только некоторые столбцы для повышения производительности.

Пример

import pandas as pd

# Создание тестовых данных
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-файлы могут содержать пропущенные значения, особые разделители или ситуации, когда некоторые строки нужно пропустить.

Пример

import pandas as pd

# Создать 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-файлы различных форматов, закладывая прочную основу для последующей очистки и анализа данных. Читателям рекомендуется больше практиковаться и хорошо освоить эти распространённые параметры.

Python math 模块Pandas: общие функции

Другие расширения