CSV-файлы Pandas

CSV (значения, разделённые запятыми; иногда также называемые значениями, разделёнными символами, потому что символ-разделитель не обязательно должен быть запятой) хранит табличные данные (числа и текст) в обычных текстовых файлах.

CSV — это распространённый, относительно простой формат файлов, широко используемый пользователями, компаниями и наукой.

Pandas позволяет очень легко работать с CSV-файлами. К распространённым методам относятся:

Название методаОписаниеОбщие параметры
pd.read_csv()Чтение данных из CSV-файла и загрузка их в DataFramefilepath_or_buffer(путь или файловый объект),sep(разделитель),header(заголовок),names(пользовательские имена столбцов),dtype(типы данных),index_col(столбец индекса)
DataFrame.to_csv()Запись DataFrame в CSV-файлpath_or_buffer(целевой путь или файловый объект),sep(разделитель),index(записывать ли индекс),columns(указанные столбцы),header(записывать ли имена столбцов),mode(режим записи)

В этой статье используетсяnba.csvв качестве примера. Вы можетескачать nba.csvилиоткрыть nba.csvдля просмотра.

pd.read_csv() - Чтение CSV-файлов

read_csv() является основным методом чтения данных из CSV-файла, загружая данные в DataFrame.

import pandas as pd

# 读取 CSV 文件,并自定义列名和分隔符
df = pd.read_csv('data.csv', sep=';', header=0, names=['A', 'B', 'C'], dtype={'A': int, 'B': float})
print(df)

Общие параметры read_csv:

ПараметрОписаниеЗначение по умолчанию
filepath_or_bufferПуть к CSV-файлу или файловому объекту (поддерживает URL, путь к файлу, файловый объект и т. д.)Обязательный параметр
sepОпределяет разделитель полей. По умолчанию — запятая (,), который можно изменить на другие символы, например табуляцию (\t)','
headerУкажите номер строки, используемой в качестве заголовка столбцов. По умолчанию — 0 (означает первую строку), или установитеNoneбез заголовка0
namesПользовательские имена столбцов. Передайте список имён столбцов.None
index_colНомер столбца или имя столбца, используемого в качестве индекса строк.None
usecolsЧитать указанные столбцы. Это могут быть имена столбцов или индексы столбцов.None
dtypeПринудительно преобразовать столбцы в указанные типы данных.None
skiprowsПропустить указанное количество строк в начале файла или передать список номеров строк.None
nrowsЧитать первые N строк данных.None
na_valuesУкажите, какие значения следует рассматривать как пропущенные значения (NaN).None
skipfooterПропустить указанное количество строк в конце файла.0
encodingФормат кодирования файла (например,utf-8,latin1и т.д.)None

Чтение данных файла nba.csv:

Пример

import pandas as pd

df = pd.read_csv('nba.csv')

print(df.to_string())

to_string()Используется для возврата данных типа DataFrame. Если эта функция не используется, результат вывода — первые 5 строк и последние 5 строк данных, а средняя часть вместо этого заменяется на....

Пример

import pandas as pd

df = pd.read_csv('nba.csv')

print(df)
Результат вывода:
              Name            Team  Number Position   Age Height  Weight            College     Salary
0    Avery Bradley  Boston Celtics     0.0       PG  25.0    6-2   180.0              Texas  7730337.0
1      Jae Crowder  Boston Celtics    99.0       SF  25.0    6-6   235.0          Marquette  6796117.0
2     John Holland  Boston Celtics    30.0       SG  27.0    6-5   205.0  Boston University        NaN
3      R.J. Hunter  Boston Celtics    28.0       SG  22.0    6-5   185.0      Georgia State  1148640.0
4    Jonas Jerebko  Boston Celtics     8.0       PF  29.0   6-10   231.0                NaN  5000000.0
..             ...             ...     ...      ...   ...    ...     ...                ...        ...
453   Shelvin Mack       Utah Jazz     8.0       PG  26.0    6-3   203.0             Butler  2433333.0
454      Raul Neto       Utah Jazz    25.0       PG  24.0    6-1   179.0                NaN   900000.0
455   Tibor Pleiss       Utah Jazz    21.0        C  26.0    7-3   256.0                NaN  2900000.0
456    Jeff Withey       Utah Jazz    24.0        C  26.0    7-0   231.0             Kansas   947276.0
457            NaN             NaN     NaN      NaN   NaN    NaN     NaN                NaN        NaN

df.to_csv() - Запись DataFrame в CSV-файл

to_csv() — метод записи DataFrame в CSV-файл. Он поддерживает такие настройки, как пользовательские разделители, имена столбцов и то, включать ли индекс.

import pandas as pd

# 假设 df 是一个已有的 DataFrame
df.to_csv('output.csv', index=False, header=True, columns=['A', 'B'])

Общие параметры to_csv():

ПараметрОписаниеЗначение по умолчанию
path_or_bufferПуть к CSV-файлу или файловый объект (поддерживаются пути к файлам, файловые объекты)Обязательный параметр
sepОпределяет разделитель полей. По умолчанию — запятая (,), который можно изменить на другие символы, например табуляцию (\t)','
indexЗаписывать ли индекс строк. По умолчанию —Trueозначает, что индекс записывается.True
columnsУкажите столбцы для записи. Может быть списком имён столбцов.None
headerЗаписывать ли имена столбцов. По умолчанию —Trueозначает, что имена столбцов записываются. Установите значениеFalseозначает, что имена столбцов не записываются.True
modeРежим записи файла. По умолчаниюw(режим записи), можно установить вa(режим добавления)'w'
encodingФормат кодировки файла, напримерutf-8,latin1ожиданиеNone
line_terminatorОпределяет символ конца строки. По умолчанию\nNone
quotingЗадаёт способ заключения данных в кавычки в файле (0-3; конкретные способы см. в документации.)None
quotecharЗадаёт символ, используемый для кавычек. По умолчанию используются двойные кавычки."'"'
date_formatПользовательский формат даты. Если столбец содержит данные даты, можно использовать этот параметр, чтобы указать формат даты.None
doublequoteЕсли установлено значениеTrue, то при записи текст, содержащий кавычки, будет заключён в двойные кавычки.True

Мы также можем использовать методto_csv(), чтобы сохранить DataFrame в виде CSV-файла:

Пример

import pandas as pd
   
# Три поля: name, site, age
nme = ["Google", "Example", "Taobao", "Wiki"]
st = ["www.google.com", "www.example.com", "www.taobao.com", "www.wikipedia.org"]
ag = [90, 40, 80, 98]
   
# Словарь
dict = {'name': nme, 'site': st, 'age': ag}
     
df = pd.DataFrame(dict)
 
# Сохранить датафрейм
df.to_csv('site.csv')

После успешного выполнения мы открываем файл site.csv, и результат показан следующим образом:


Обработка данных

head()

head( n )Метод, используемый для чтения первых n строк. Если параметр n не указан, по умолчанию возвращается 5 строк.

Пример - Чтение первых 5 строк

import pandas as pd

df = pd.read_csv('nba.csv')

print(df.head())

Результат вывода:

            Name            Team  Number Position   Age Height  Weight            College     Salary
0  Avery Bradley  Boston Celtics     0.0       PG  25.0    6-2   180.0              Texas  7730337.0
1    Jae Crowder  Boston Celtics    99.0       SF  25.0    6-6   235.0          Marquette  6796117.0
2   John Holland  Boston Celtics    30.0       SG  27.0    6-5   205.0  Boston University        NaN
3    R.J. Hunter  Boston Celtics    28.0       SG  22.0    6-5   185.0      Georgia State  1148640.0
4  Jonas Jerebko  Boston Celtics     8.0       PF  29.0   6-10   231.0                NaN  5000000.0

Пример - Чтение первых 10 строк

import pandas as pd

df = pd.read_csv('nba.csv')

print(df.head(10))

Результат вывода:

            Name            Team  Number Position   Age Height  Weight            College      Salary
0  Avery Bradley  Boston Celtics     0.0       PG  25.0    6-2   180.0              Texas   7730337.0
1    Jae Crowder  Boston Celtics    99.0       SF  25.0    6-6   235.0          Marquette   6796117.0
2   John Holland  Boston Celtics    30.0       SG  27.0    6-5   205.0  Boston University         NaN
3    R.J. Hunter  Boston Celtics    28.0       SG  22.0    6-5   185.0      Georgia State   1148640.0
4  Jonas Jerebko  Boston Celtics     8.0       PF  29.0   6-10   231.0                NaN   5000000.0
5   Amir Johnson  Boston Celtics    90.0       PF  29.0    6-9   240.0                NaN  12000000.0
6  Jordan Mickey  Boston Celtics    55.0       PF  21.0    6-8   235.0                LSU   1170960.0
7   Kelly Olynyk  Boston Celtics    41.0        C  25.0    7-0   238.0            Gonzaga   2165160.0
8   Terry Rozier  Boston Celtics    12.0       PG  22.0    6-2   190.0         Louisville   1824360.0
9   Marcus Smart  Boston Celtics    36.0       PG  22.0    6-4   220.0     Oklahoma State   3431040.0

tail()

tail( n )Метод, используемый для чтения последних n строк. Если параметр n не указан, по умолчанию возвращается 5 строк. Для пустых строк значения каждого поля возвращаютNaN。

Пример - Чтение последних 5 строк

import pandas as pd

df = pd.read_csv('nba.csv')

print(df.tail())

Результат вывода:

             Name       Team  Number Position   Age Height  Weight College     Salary
453  Shelvin Mack  Utah Jazz     8.0       PG  26.0    6-3   203.0  Butler  2433333.0
454     Raul Neto  Utah Jazz    25.0       PG  24.0    6-1   179.0     NaN   900000.0
455  Tibor Pleiss  Utah Jazz    21.0        C  26.0    7-3   256.0     NaN  2900000.0
456   Jeff Withey  Utah Jazz    24.0        C  26.0    7-0   231.0  Kansas   947276.0
457           NaN        NaN     NaN      NaN   NaN    NaN     NaN     NaN        NaN

Пример - Чтение последних 10 строк

import pandas as pd

df = pd.read_csv('nba.csv')

print(df.tail(10))

Результат вывода:

               Name       Team  Number Position   Age Height  Weight   College      Salary
448  Gordon Hayward  Utah Jazz    20.0       SF  26.0    6-8   226.0    Butler  15409570.0
449     Rodney Hood  Utah Jazz     5.0       SG  23.0    6-8   206.0      Duke   1348440.0
450      Joe Ingles  Utah Jazz     2.0       SF  28.0    6-8   226.0       NaN   2050000.0
451   Chris Johnson  Utah Jazz    23.0       SF  26.0    6-6   206.0    Dayton    981348.0
452      Trey Lyles  Utah Jazz    41.0       PF  20.0   6-10   234.0  Kentucky   2239800.0
453    Shelvin Mack  Utah Jazz     8.0       PG  26.0    6-3   203.0    Butler   2433333.0
454       Raul Neto  Utah Jazz    25.0       PG  24.0    6-1   179.0       NaN    900000.0
455    Tibor Pleiss  Utah Jazz    21.0        C  26.0    7-3   256.0       NaN   2900000.0
456     Jeff Withey  Utah Jazz    24.0        C  26.0    7-0   231.0    Kansas    947276.0
457             NaN        NaN     NaN      NaN   NaN    NaN     NaN       NaN         NaN

info()

Метод info() возвращает некоторую базовую информацию о таблице:

Пример

import pandas as pd

df = pd.read_csv('nba.csv')

print(df.info())

Результат вывода:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 458 entries, 0 to 457          # 行数,458 行,第一行编号为 0
Data columns (total 9 columns):            # 列数,9列
 #   Column    Non-Null Count  Dtype       # 各列的数据类型
---  ------    --------------  -----  
 0   Name      457 non-null    object 
 1   Team      457 non-null    object 
 2   Number    457 non-null    float64
 3   Position  457 non-null    object 
 4   Age       457 non-null    float64
 5   Height    457 non-null    object 
 6   Weight    457 non-null    float64
 7   College   373 non-null    object         # non-null,意思为非空的数据    
 8   Salary    446 non-null    float64
dtypes: float64(4), object(5)                 # 类型

non-null означает непустые данные. Из приведённой выше информации видно, что всего имеется 458 строк, а поле College содержит наибольшее количество null-значений.

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