Подробное объяснение основных функций Pandas | Легко играть в Pandas (2)

искусственный интеллект Python анализ данных pandas
Подробное объяснение основных функций Pandas | Легко играть в Pandas (2)

Учить вас, как изучать панд, не моя цель,Моя цель — научить вас легко играть в панд.. Я представлю очки знаний Pandas через серию примеров, чтобы вам не было скучно на пути к изучению Pandas.

Отказ от ответственности: что я написалЛегко играть Учебники Pandas бесплатны, если это поможет вам, вы можете продолжать следовать за мной.

существуетПодробное объяснение структуры данных Pandas | Легко играть с Pandas (1)Представляет две часто используемые структуры данных Series и DataFrame в Pandas, Вот некоторые общие функции этих структур данных.

# 导入相关库
import numpy as np
import pandas as pd

Часто используемые основные функции

Когда мы создаем Series и DataFrame, какие функции мы часто используем? Приходите ко мне. Ссылаясь на сценарий из предыдущей главы, у нас есть некоторая информация о пользователе, и мы храним ее в DataFrame.

Поскольку в большинстве случаев DataFrame используется чаще, чем Series, это пример DataFrame, но на самом деле многие общие функции также применимы к Series.

index = pd.Index(data=["Tom", "Bob", "Mary", "James"], name="name")

data = {
    "age": [18, 30, 25, 40],
    "city": ["BeiJing", "ShangHai", "GuangZhou", "ShenZhen"],
    "sex": ["male", "male", "female", "male"]
}

user_info = pd.DataFrame(data=data, index=index)
user_info
age city sex
name
Tom 18 BeiJing male
Bob 30 ShangHai male
Mary 25 GuangZhou female
James 40 ShenZhen male

Как правило, чтобы получить данные, первый шаг, который нам нужно сделать, — это понять общую ситуацию с данными, которую можно использовать.infoспособ просмотра.

user_info.info()
Index: 4 entries, Tom to James
Data columns (total 3 columns):
age     4 non-null int64
city    4 non-null object
sex     4 non-null object
dtypes: int64(1), object(2)
memory usage: 128.0+ bytes

Если наш объем данных очень велик, и я хочу посмотреть, как выглядят данные, я, конечно, не хочу видеть все данные.В настоящее время мы можем использовать только n элементов в начале или n элементов в хвосте . Чтобы просмотреть n фрагментов данных в заголовке, вы можете использоватьheadметод, чтобы просмотреть n данных в хвосте, вы можете использоватьtailметод.

user_info.head(2)
age city sex
name
Tom 18 BeiJing male
Bob 30 ShangHai male

Кроме того, структуры данных в Pandas имеют общие методы и свойства в ndarray, например через.shapeПолучить форму данных с помощью.TПолучите транспонирование данных.

user_info.shape
(4, 3)
user_info.T
name Tom Bob Mary James
age 18 30 25 40
city BeiJing ShangHai GuangZhou ShenZhen
sex male male female male

Если мы хотим получить исходные данные, содержащиеся в DataFrame, мы можем передать.valuesЧтобы получить, тип данных после получения на самом деле является ndarray.

user_info.values
array([[18, 'BeiJing', 'male'],
       [30, 'ShangHai', 'male'],
       [25, 'GuangZhou', 'female'],
       [40, 'ShenZhen', 'male']], dtype=object)

Описательный и статистический

Иногда после получения данных мы хотим проверить простые статистические показатели данных (максимальное значение, минимальное значение, среднее значение, медиана и т. д.), например, мы хотим проверить максимальное значение возраста. Это?

прямо кageЭта колонка вызываетmaxметод.

user_info.age.max()
40

Точно так же, позвонивmin,mean,quantile,sumМетоды могут реализовывать минимум, среднее значение, медиану и суммирование. Видно, что дляSeriesПосле вызова этих методов возвращается только агрегированный результат.

Вот интересный метод:cumsum, посмотрите на имя и найдите его иsumМетод имеет значение, на самом деле имеет значение,cumsumтакже используется для подведения итогов, но используется длясовокупная сумма, то есть он получает тот же результат, что и исходныйSeriesилиDataFrameтот же размер.

user_info.age.cumsum()
name
Tom       18
Bob       48
Mary      73
James    113
Name: age, dtype: int64

можно увидеть,cummaxКонечный результат представляет собой сумму результата предыдущей суммы и исходного текущего значения в качестве текущего значения. Это звучит немного запутанно. Например, приведенный выше73 = 48 + 25.cumsumЕго также можно использовать для управления объектами строкового типа.

user_info.sex.cumsum()
name
Tom                    male
Bob                malemale
Mary         malemalefemale
James    malemalefemalemale
Name: sex, dtype: object

Если вы хотите получить больше статистических методов, вы можете обратиться к официальной ссылке:Descriptive statistics

Хотя существуют соответствующие методы для различных общих статистических значений, если я хочу получить несколько индикаторов, мне нужно вызывать метод несколько раз.Не кажется ли это немного хлопотным?

Дизайнеры Pandas, естественно, учли это.Чтобы получить сразу несколько статистических показателей, достаточно вызватьdescribeметод.

user_info.describe()
age
count 4.000000
mean 28.250000
std 9.251126
min 18.000000
25% 23.250000
50% 27.500000
75% 32.500000
max 40.000000

Как видите, звоните напрямуюdescribeПосле метода будут отображаться некоторые статистические показатели столбцов числового типа, такие как общее количество, среднее значение, стандартное отклонение, минимальное значение, максимальное значение, квантиль 25%/50%/75%. Если вы хотите просмотреть статистику нечисловых столбцов, вы можете установить include=["object"] для ее получения.

user_info.describe(include=["object"])
city sex
count 4 4
unique 4 2
top BeiJing male
freq 1 3

Приведенные выше результаты показывают некоторые статистические показатели нечисловых столбцов: общее количество, количество дубликатов, наиболее распространенное значение, частота наиболее распространенного значения.

Кроме того, если я хочуПодсчитайте количество вхождений каждого значения в столбце, как добиться этого быстро? перечислитьvalue_countsбыстрый способ получитьSeriesКоличество вхождений каждого значения в .

user_info.sex.value_counts()
male      3
female    1
Name: sex, dtype: int64

Если вы хотите получить индекс, соответствующий максимальному или минимальному значению столбца, вы можете использоватьidxmaxилиidxminметод завершен.

user_info.age.idxmax()
'James'

дискретность

Иногда мы сталкиваемся с такой потребностью, что мы хотим дискретизировать (ковшировать) возраст, грубо говоря, это разделить возраст на несколько интервалов, здесь мы хотим разделить возраст на 3 интервала. вы можете использовать пандыcutметод для завершения.

pd.cut(user_info.age, 3)
name
Tom      (17.978, 25.333]
Bob      (25.333, 32.667]
Mary     (17.978, 25.333]
James      (32.667, 40.0]
Name: age, dtype: category
Categories (3, interval[float64]): [(17.978, 25.333] < (25.333, 32.667] < (32.667, 40.0]]

можно увидеть,cutРавноудаленный дискретный интервал генерируется автоматически, и это не проблема, если вы хотите определить его самостоятельно.

pd.cut(user_info.age, [1, 18, 30, 50])
name
Tom       (1, 18]
Bob      (18, 30]
Mary     (18, 30]
James    (30, 50]
Name: age, dtype: category
Categories (3, interval[int64]): [(1, 18] < (18, 30] < (30, 50]]

Иногда после дискретизации, если вы хотите дать каждому интервалу имя, вы можете указать параметр labels.

pd.cut(user_info.age, [1, 18, 30, 50], labels=["childhood", "youth", "middle"])
name
Tom      childhood
Bob          youth
Mary         youth
James       middle
Name: age, dtype: category
Categories (3, object): [childhood < youth < middle]

за исключением того, что вы можете использоватьcutПомимо дискретизации,qcutТакже возможна дискретизация.cutдискретизируется в соответствии с размером каждого значения,qcutдискретизируется в соответствии с количеством вхождений каждого значения.

pd.qcut(user_info.age, 3)
name
Tom      (17.999, 25.0]
Bob        (25.0, 30.0]
Mary     (17.999, 25.0]
James      (30.0, 40.0]
Name: age, dtype: category
Categories (3, interval[float64]): [(17.999, 25.0] < (25.0, 30.0] < (30.0, 40.0]]

Функция сортировки

В анализе данных без сортировки данных не обойтись. Pandas поддерживает два метода сортировки: сортировка по оси (индекс или столбец) и сортировка по фактическому значению.

Давайте сначала посмотрим на сортировку по индексу:sort_indexПо умолчанию методы сортируются в положительном порядке по индексу.

user_info.sort_index()
age city sex
name
Bob 30 ShangHai male
James 40 ShenZhen male
Mary 25 GuangZhou female
Tom 18 BeiJing male

Если вы хотите отсортировать в обратном порядке по столбцу, вы можете установить параметрaxis=1иascending=False.

user_info.sort_index(axis=1, ascending=False)
sex city age
name
Tom male BeiJing 18
Bob male ShangHai 30
Mary female GuangZhou 25
James male ShenZhen 40

Если вы хотите реализовать сортировку по фактическому значению, например, хотите сортировать по возрасту, как это реализовать?

использоватьsort_valuesметод, установка параметровby="age"Вот и все.

user_info.sort_values(by="age")
age city sex
name
Tom 18 BeiJing male
Mary 25 GuangZhou female
Bob 30 ShangHai male
James 40 ShenZhen male

Иногда нам может понадобиться отсортировать по нескольким значениям, например: чтобы отсортировать по возрасту и городу вместе, вы можете задать параметр в виде списка.

Уведомление:Порядок каждого элемента в списке влияет на приоритет сортировки..

user_info.sort_values(by=["age", "city"])
age city sex
name
Tom 18 BeiJing male
Mary 25 GuangZhou female
Bob 30 ShangHai male
James 40 ShenZhen male

Как правило, после сортировки нам может потребоваться получить наибольшее значение n или наименьшее значение n, мы можем использоватьnlargestиnsmallestметод для достижения этого, чем сначала сортировка, а затем использованиеhead(n)способ гораздо быстрее.

user_info.age.nlargest(2)
name
James    40
Bob      30
Name: age, dtype: int64

приложение функции

Хотя Pandas предоставляет нам очень богатые функции, иногда нам может потребоваться настроить некоторые функции и применить их к DataFrame или Series. Часто используемые функции:map,apply,applymap.

map— это метод, специфичный для Серии, с помощью которого можно преобразовать каждый элемент Серии.

Если я хочу определить, является ли пользователь среднего возраста по возрасту (старше 30 лет — средний возраст), передайтеmapЭто легко сделать.

# 接收一个 lambda 函数
user_info.age.map(lambda x: "yes" if x >= 30 else "no")
name
Tom       no
Bob      yes
Mary      no
James    yes
Name: age, dtype: object

Другой пример, если я хочу судить, юг это или север по городу, я могу сделать это.

city_map = {
    "BeiJing": "north",
    "ShangHai": "south",
    "GuangZhou": "south",
    "ShenZhen": "south"
}

# 传入一个 map
user_info.city.map(city_map)
name
Tom      north
Bob      south
Mary     south
James    south
Name: city, dtype: object

applyЭтот метод поддерживает как Series, так и DataFrame и работает с каждым значением при работе с Series и со всеми строками или всеми столбцами при работе с DataFrame (черезaxisконтроль параметров).

# 对 Series 来说,apply 方法 与 map 方法区别不大。
user_info.age.apply(lambda x: "yes" if x >= 30 else "no")
name
Tom       no
Bob      yes
Mary      no
James    yes
Name: age, dtype: object
# 对 DataFrame 来说,apply 方法的作用对象是一行或一列数据(一个Series)
user_info.apply(lambda x: x.max(), axis=0)
age           40
city    ShenZhen
sex         male
dtype: object

applymapЭтот метод специфичен для DataFrame, он действует на каждый элемент в DataFrame, и его действие на DataFrame аналогичноapplyЭффекты в сериале.

user_info.applymap(lambda x: str(x).lower())
age city sex
name
Tom 18 beijing male
Bob 30 shanghai male
Mary 25 guangzhou female
James 40 shenzhen male

Изменить имена столбцов/индексов

В процессе использования DataFrame часто приходится изменять имена столбцов, имена индексов и т. д. использоватьrenameЛегко достичь.

Изменение имени столбца необходимо только для установки параметровcolumnsВот и все.

user_info.rename(columns={"age": "Age", "city": "City", "sex": "Sex"})
Age City Sex
name
Tom 18 BeiJing male
Bob 30 ShangHai male
Mary 25 GuangZhou female
James 40 ShenZhen male

Точно так же изменение имени индекса требует только установки параметровindexВот и все.

user_info.rename(index={"Tom": "tom", "Bob": "bob"})
age city sex
name
tom 18 BeiJing male
bob 30 ShangHai male
Mary 25 GuangZhou female
James 40 ShenZhen male

тип операции

Если вы хотите получить количество столбцов каждого типа, вы можете использоватьget_dtype_countsметод.

user_info.get_dtype_counts()
int64     1
object    2
dtype: int64

Если вы хотите преобразовать тип данных, вы можете передатьastypeЧто нужно сделать.

user_info["age"].astype(float)
name
Tom      18.0
Bob      30.0
Mary     25.0
James    40.0
Name: age, dtype: float64

Иногда это включает в себя преобразование типа объекта в другие типы, причем общие преобразуются в числа, даты и разницу во времени, которые соответствуют Pandas.to_numeric,to_datetime,to_timedeltaметод.

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

user_info["height"] = ["178", "168", "178", "180cm"]
user_info
age city sex height
name
Tom 18 BeiJing male 178
Bob 30 ShangHai male 168
Mary 25 GuangZhou female 178
James 40 ShenZhen male 180cm

Теперь преобразуйте столбец высоты в число. Очевидно, что 180 см — это не число. Чтобы принудительно преобразовать, мы можем передатьerrorsПараметр, функцией этого параметра является метод обработки в случае сбоя принудительного преобразования.

по умолчанию,errors='raise', что означает, что исключение генерируется сразу после неудачного приведения, устанавливаяerrors='coerce'Рассматриваемому элементу можно присвоить pd.NaT (для datetime и timedelta) или np.nan (число) в случае сбоя приведения. настраиватьerrors='ignore'Исходные данные могут быть возвращены в случае сбоя принудительного обновления.

pd.to_numeric(user_info.height, errors="coerce")
name
Tom      178.0
Bob      168.0
Mary     178.0
James      NaN
Name: height, dtype: float64
pd.to_numeric(user_info.height, errors="ignore")
name
Tom        178
Bob        168
Mary       178
James    180cm
Name: height, dtype: object

Чтобы узнать больше об искусственном интеллекте, обратите внимание на общедоступный номер:Фракция ИИ

qrcode_for_gh_60cef389e81c_258.jpg

Здесь я упорядочиваю содержание всей статьи в формате pdf, и те, кто хочет файл в формате pdf, могут ответить на ключевые слова в фоновом режиме официального аккаунта:pandas02.

Для получения дополнительной информации о пандах см.:Играйте с пандами с легкостью