Представлено 23 часто используемых функции Pandas.

Python
Представлено 23 часто используемых функции Pandas.

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Всем привет, меня зовут Питер~

Выберите 23 часто используемые функции Pandas из 26 букв и познакомьте всех с их использованием. где o, y, z не имеют соответствующих функций.

import pandas as pd
import numpy as np

Ниже описано, как использовать каждую функцию.Для получения более подробной информации, пожалуйста, посетите официальный сайт:pandas друг ударил его.org/docs/refer E…

назначить функцию

df = pd.DataFrame({
    'temp_c': [17.0, 25.0]},
    index=['Portland', 'Berkeley'])
df
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
temp_c
Portland 17.0
Berkeley 25.0
# 生成新的字段

df.assign(temp_f=df['temp_c'] * 9 / 5 + 32)
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
temp_c temp_f
Portland 17.0 62.6
Berkeley 25.0 77.0
df  # 原来DataFrame是不改变的
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
temp_c
Portland 17.0
Berkeley 25.0
df["temp_f1"] = df["temp_c"] * 9 / 5 + 32
df
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
temp_c temp_f1
Portland 17.0 62.6
Berkeley 25.0 77.0
df
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
temp_c temp_f1
Portland 17.0 62.6
Berkeley 25.0 77.0

логическая функция

Возвращает логическое значение одного элемента в одной серии или кадре данных: True или False.

pd.Series([True]).bool()
True
pd.Series([False]).bool()
False
pd.DataFrame({'col': [True]}).bool()
True
pd.DataFrame({'col': [False]}).bool()
False
# # 多个元素引发报错

# pd.DataFrame({'col': [True,False]}).bool()

конкат функция

Эта функция используется для представления объединения нескольких кадров данных по горизонтали или по вертикали.

df1 = pd.DataFrame({
    "sid":["s1","s2"],
    "name":["xiaoming","Mike"]})
df1
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 s1 xiaoming
1 s2 Mike
df2 = pd.DataFrame({
    "sid":["s3","s4"],
    "name":["Tom","Peter"]})
df2
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 s3 Tom
1 s4 Peter
df3 = pd.DataFrame({
    "address":["北京","深圳"],             
    "sex":["Male","Female"]})
df3
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
address sex
0 Пекин Male
1 Шэньчжэнь Female
# 使用1:纵向
pd.concat([df1,df2])
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 s1 xiaoming
1 s2 Mike
0 s3 Tom
1 s4 Peter
# 使用2:横向
pd.concat([df1,df3],axis=1)
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name address sex
0 s1 xiaoming Пекин Male
1 s2 Mike Шэньчжэнь Female

функция дропна

удалить пустые значения

df4 = pd.DataFrame({
    "sid":["s1","s2", np.nan],             
    "name":["xiaoming",np.nan, "Mike"]})
df4
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 s1 xiaoming
1 s2 NaN
2 NaN Mike
df4.dropna()
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 s1 xiaoming
df4.dropna(subset=["name"])
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 s1 xiaoming
2 NaN Mike

функция взрыва

Использование функции разнесения: преобразование широкой таблицы в длинную.

df5 = pd.DataFrame({
    "sid":["s1","s2"],       
    "phones":[["华为","小米","一加"],["三星","苹果"]]
                   })
df5
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid phones
0 s1 [Хуавей, Сяоми, OnePlus]
1 s2 [Самсунг, Эппл]
df5.explode("phones")
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid phones
0 s1 Хуавей
0 s1 Просо
0 s1 один плюс
1 s2 Samsung
1 s2 яблоко
df5
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid phones
0 s1 [Хуавей, Сяоми, OnePlus]
1 s2 [Самсунг, Эппл]

функция заполнения

Заполните пропущенные значения

df4
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 s1 xiaoming
1 s2 NaN
2 NaN Mike
df4.fillna({"sid":"s3","name":"Peter"})
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 s1 xiaoming
1 s2 Peter
2 s3 Mike

групповая функция

Функция же групповой статистики

# 借用这个结果
df6 = df5.explode("phones")
df6
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid phones
0 s1 Хуавей
0 s1 Просо
0 s1 один плюс
1 s2 Samsung
1 s2 яблоко
df6.groupby("sid")["phones"].count()
sid
s1    3
s2    2
Name: phones, dtype: int64

головная функция

Просмотрите данные первых нескольких строк, по умолчанию это первые 5 строк.

df7 = pd.DataFrame({
    "sid":list(range(10)),                
    "name":list(range(80,100,2))})
df7
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 0 80
1 1 82
2 2 84
3 3 86
4 4 88
5 5 90
6 6 92
7 7 94
8 8 96
9 9 98
df7.head()   # 默认前5行
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 0 80
1 1 82
2 2 84
3 3 86
4 4 88
df7.head(3)  # 指定前3行
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 0 80
1 1 82
2 2 84

нулевая функция

Судя по тому, есть ли пропущенные значения, суперобщая функция

df4
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 s1 xiaoming
1 s2 NaN
2 NaN Mike
df4.isnull()  # True表示缺失
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid name
0 False False
1 False True
2 True False
df4.isnull().sum()  # 每个字段缺失的总和
sid     1
name    1
dtype: int64
df6.isnull().sum()   # 没有缺失值
sid       0
phones    0
dtype: int64

присоединиться к функции

Для объединения разных DataFrames:

df7 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],
    'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
df7
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
key A
0 K0 A0
1 K1 A1
2 K2 A2
3 K3 A3
4 K4 A4
5 K5 A5
df8 = pd.DataFrame({
    'key': ['K0', 'K1', 'K2'],
    'B': ['B0', 'B1', 'B2']})
df8
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
key B
0 K0 B0
1 K1 B1
2 K2 B2
df7.join(df8,lsuffix="_df7",rsuffix="_df8")
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
key_df7 A key_df8 B
0 K0 A0 K0 B0
1 K1 A1 K1 B1
2 K2 A2 K2 B2
3 K3 A3 NaN NaN
4 K4 A4 NaN NaN
5 K5 A5 NaN NaN

курт функция

Найдите значение эксцесса данных

df9 = pd.DataFrame({
    "A":[12, 4, 5, 44, 1], 
    "B":[5, 2, 54, 3, 2], 
    "C":[20, 16, 7, 3, 8], 
    "D":[14, 3, 17, 2, 6]}) 
df9
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
A B C D
0 12 5 20 14
1 4 2 16 3
2 5 54 7 17
3 44 3 3 2
4 1 2 8 6
df9.kurt()
A    3.936824
B    4.941512
C   -1.745717
D   -2.508808
dtype: float64

локальная функция

loc — это аббревиатура от location, locate и find data.

df9
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
A B C D
0 12 5 20 14
1 4 2 16 3
2 5 54 7 17
3 44 3 3 2
4 1 2 8 6
df9.loc[1,:]  # 第一行全部列的数据
A     4
B     2
C    16
D     3
Name: 1, dtype: int64
df9.loc[1:3,"B"]  # 1到3行的B列
1     2
2    54
3     3
Name: B, dtype: int64

функция слияния

Это также функция слияния данных, похожая на соединение в SQL, с самой мощной функцией.

df7
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
key A
0 K0 A0
1 K1 A1
2 K2 A2
3 K3 A3
4 K4 A4
5 K5 A5
df8
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
key B
0 K0 B0
1 K1 B1
2 K2 B2
pd.merge(df7,df8)  # 默认how的参数是inner
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
key A B
0 K0 A0 B0
1 K1 A1 B1
2 K2 A2 B2
pd.merge(df7,df8,how="outer")  
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
key A B
0 K0 A0 B0
1 K1 A1 B1
2 K2 A2 B2
3 K3 A3 NaN
4 K4 A4 NaN
5 K5 A5 NaN

уникальная функция

Уникальное значение для статистики

df10 = pd.DataFrame({
    "sid":list("acbdefg"),
    "score":[9,8,9,7,8,9,3]
                    })
df10
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid score
0 a 9
1 c 8
2 b 9
3 d 7
4 e 8
5 f 9
6 g 3
df10.nunique()
sid      7
score    4
dtype: int64

функция pct_change

Рассчитать отношение текущего периода к предыдущему периоду

s = pd.Series([90, 91, 85])
s
0    90
1    91
2    85
dtype: int64
s.pct_change()
0         NaN
1    0.011111
2   -0.065934
dtype: float64
(91 - 90) / 90
0.011111111111111112
(85 - 91) / 91
-0.06593406593406594
# 和前两个时期相比
s.pct_change(periods=2) 
0         NaN
1         NaN
2   -0.055556
dtype: float64
# 如果存在空值,用填充方法
s = pd.Series([90, 91, None, 85])
s  
0    90.0
1    91.0
2     NaN
3    85.0
dtype: float64
s.pct_change(fill_method='ffill')
0         NaN
1    0.011111
2    0.000000
3   -0.065934
dtype: float64

функция запроса

Значение запроса на основе условия

df10
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid score
0 a 9
1 c 8
2 b 9
3 d 7
4 e 8
5 f 9
6 g 3
df10.query("score >= 8")
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid score
0 a 9
1 c 8
2 b 9
4 e 8
5 f 9

ранговая функция

Функция ранжирования аналогична функции оконной функции SQL:

df10
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid score
0 a 9
1 c 8
2 b 9
3 d 7
4 e 8
5 f 9
6 g 3
df10["rank_10"] = df10["score"].rank()
df10
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid score rank_10
0 a 9 6.0
1 c 8 3.5
2 b 9 6.0
3 d 7 2.0
4 e 8 3.5
5 f 9 6.0
6 g 3 1.0
df10["rank_10_max"] = df10["score"].rank(method="max")
df10
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid score rank_10 rank_10_max
0 a 9 6.0 7.0
1 c 8 3.5 4.0
2 b 9 6.0 7.0
3 d 7 2.0 2.0
4 e 8 3.5 4.0
5 f 9 6.0 7.0
6 g 3 1.0 1.0
df10["rank_10_min"] = df10["score"].rank(method="min")
df10
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid score rank_10 rank_10_max rank_10_min
0 a 9 6.0 7.0 5.0
1 c 8 3.5 4.0 3.0
2 b 9 6.0 7.0 5.0
3 d 7 2.0 2.0 2.0
4 e 8 3.5 4.0 3.0
5 f 9 6.0 7.0 5.0
6 g 3 1.0 1.0 1.0

функция sort_values

функция сортировки данных

df9
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
A B C D
0 12 5 20 14
1 4 2 16 3
2 5 54 7 17
3 44 3 3 2
4 1 2 8 6
df9.sort_values("A")  # 默认是升序排列
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
A B C D
4 1 2 8 6
1 4 2 16 3
2 5 54 7 17
0 12 5 20 14
3 44 3 3 2
# 先根据B升序,如果B相同,再根据D降序

df9.sort_values(["B","D"], ascending=[True,False])  
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
A B C D
4 1 2 8 6
1 4 2 16 3
3 44 3 3 2
0 12 5 20 14
2 5 54 7 17

хвостовая функция

Посмотреть данные в конце

df7.tail()
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
key A
1 K1 A1
2 K2 A2
3 K3 A3
4 K4 A4
5 K5 A5
df7.tail(3)
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
key A
3 K3 A3
4 K4 A4
5 K5 A5

уникальная функция

Найдите уникальный элемент каждого поля

df10
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid score rank_10 rank_10_max rank_10_min
0 a 9 6.0 7.0 5.0
1 c 8 3.5 4.0 3.0
2 b 9 6.0 7.0 5.0
3 d 7 2.0 2.0 2.0
4 e 8 3.5 4.0 3.0
5 f 9 6.0 7.0 5.0
6 g 3 1.0 1.0 1.0
df10["score"].unique()
array([9, 8, 7, 3])
df10["rank_10"].unique()
array([6. , 3.5, 2. , 1. ])

функция value_counts

Используется для подсчета количества каждого уникального значения в поле

df6
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
sid phones
0 s1 Хуавей
0 s1 Просо
0 s1 один плюс
1 s2 Samsung
1 s2 яблоко
df6["sid"].value_counts()
s1    3
s2    2
Name: sid, dtype: int64
df6["phones"].value_counts()
华为    1
苹果    1
三星    1
一加    1
小米    1
Name: phones, dtype: int64

где функция

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

w = pd.Series(range(7))
w
0    0
1    1
2    2
3    3
4    4
5    5
6    6
dtype: int64
# 满足条件的显示;不满足的用空值代替
w.where(w>3)
0    NaN
1    NaN
2    NaN
3    NaN
4    4.0
5    5.0
6    6.0
dtype: float64
# 不满足条件的用8代替
w.where(w > 1, 8)
0    8
1    8
2    2
3    3
4    4
5    5
6    6
dtype: int64

хз функция

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

d = {'num_legs': [4, 4, 2, 2],
     'num_wings': [0, 0, 2, 2],
     'class': ['mammal', 'mammal', 'mammal', 'bird'],
     'animal': ['cat', 'dog', 'bat', 'penguin'],
     'locomotion': ['walks', 'walks', 'flies', 'walks']}
# 生成数据
df11 = pd.DataFrame(data=d)
# 重置索引
df11 = df11.set_index(['class', 'animal', 'locomotion'])
df11
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
num_legs num_wings
class animal locomotion
mammal cat walks 4 0
dog walks 4 0
bat flies 2 2
bird penguin walks 2 2
# 获取指定索引的值
df11.xs('mammal')  
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
num_legs num_wings
animal locomotion
cat walks 4 0
dog walks 4 0
bat flies 2 2
# 指定多个索引处的值
df11.xs(('mammal', 'dog'))
/Applications/downloads/anaconda/anaconda3/lib/python3.7/site-packages/IPython/core/interactiveshell.py:2881: PerformanceWarning: indexing past lexsort depth may impact performance.
  return runner(coro)
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
num_legs num_wings
locomotion
walks 4 0
# 获取指定索引和级别(level)的值

df11.xs('cat', level=1)
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
num_legs num_wings
class locomotion
mammal walks 4 0
df11
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
num_legs num_wings
class animal locomotion
mammal cat walks 4 0
dog walks 4 0
bat flies 2 2
bird penguin walks 2 2
# 获取多个索引和级别的值
df11.xs(('bird', 'walks'),level=[0, 'locomotion'])
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
num_legs num_wings
animal
penguin 2 2
# 获取指定列和轴上的值
df11.xs('num_wings', axis=1)
class   animal   locomotion
mammal  cat      walks         0
        dog      walks         0
        bat      flies         2
bird    penguin  walks         2
Name: num_wings, dtype: int64