correl函数相关系数大小意义_Pandas 常用函数汇总

本文汇总了Pandas库中用于数据统计、清洗的常用函数,包括计算统计量、处理缺失值、类型转换等功能,帮助理解并运用这些函数进行数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

d75279deabc799b89c1d89d89d8b1cda.png
作者 | 刘顺祥
来源 | 数据分析1480
盘点Pandas 的100 个常用函数​mp.weixin.qq.com

Pandas 常用函数汇总

数据统计

S 表示 Pandas 中的序列 Series 对象

|函数|含义|说明| |:-:|:-:|:-:| |s.min|计算最小值|| |s.max|计算最大值|| |s.sum|求和|| |s.mean|计算平均值|| |s.count|计数|统计非缺失元素的个数| |s.size|计数|统计所有元素的个数| |s.median|计算中位数|| |s.var|计算方差|| |s.std|计算标准差||

|函数|含义|说明| |:-:|:-:|:-:| |s.quantile|计算任意分位数|| |s.cov|计算协方差|| |s.corr|计算相关系数|| |s.skew|计算偏度|| |s.kurt|计算峰度|| |s.mode|计数众数|| |s.describe|描述性统计|一次性返回多个统计结果| |s.groupby|分组|| |s.aggregate|聚合运算|可以自定义统计函数|

import pandas as pd
import numpy as np

x = pd.Series(np.random.normal(2, 3, 1000))
y = 2 * x + pd.Series(np.random.normal(1, 2, 1000))

# x 与 y 的相关系数
print(x.corr(y))
print(y.corr(x))

# y 的偏度
print(y.skew())

# y 的统计描述值
print(x.describe())

z = pd.Series(['A', 'B', 'C']).sample(n=1000, replace=True)  # 有放回抽样
print(z.head())
# 重新修改 z 的行索引
z.index = range(1000)
# 按照 z 分组,统计 y 的组内平均值
y.groupby(by=z).aggregate(np.mean)

0.9501615962384593
0.9501615962384593
-0.05085778882750406
count    1000.000000
mean        2.116362
std         2.978162
min        -6.694530
25%         0.085229
50%         2.049701
75%         4.158076
max        11.854475
dtype: float64
2    C
1    B
0    A
2    C
2    C
dtype: object

A    5.318871
B    5.161616
C    4.867143
dtype: float64

|函数|含义|说明| |:-:|:-:|:-:| |s.argmin|寻找最小值所在位置|| |s.argmax|寻找最大值所在位置|| |s.any|等价于逻辑或|| |s.all|等价于逻辑与|| |s.value_counts|频次统计|| |s.cumsun|运算累计和|| |s.cumprod|运算累计积|| |s.pct_change|运算比率|后一个元素与前一个元素的比率|

# 统计 z 中元素的频次
print(z.value_counts())

a = pd.Series([1, 5, 10, 15, 25, 30])
# 计算 a 中各元素的累计百分比
print(a.cumsum())
print(a.cumsum() / a.cumsum()[a.size - 1])

B    360
A    332
C    308
dtype: int64
0     1
1     6
2    16
3    31
4    56
5    86
dtype: int64
0    0.011628
1    0.069767
2    0.186047
3    0.360465
4    0.651163
5    1.000000
dtype: float64

数据清洗

|函数|含义|说明| |:-:|:-:|:-:| |s.duplicated|判断序列中元素是否重复|| |s.drop_duplicates|删除重复值|| |s.hasnans|判断序列是否存在缺失值|仅返回 True 或者 False| |s.isnull|判断序列元素是否为缺失|返回和序列长度一样的 bool 值| |s.notnull|判断序列元素是否不为缺失|返回和序列长度一样的 bool 值| |s.dropna|删除缺失值|| |s.fillna|缺失值填充|| |s.ffill|前向填充缺失值|使用缺失值的前一个元素填充| |s.bfill|后向填充缺失值|使用缺失值的后一个元素填充|

x = pd.Series([10, 13, np.nan, 17, 28, 19, 33, np.nan, 27])

# 检查序列中是否存在缺失值
print(x.hasnans)

# 将缺失值填充为平均值
print(x.fillna(value=x.mean()))

# 前向缺失值填充
print(x.ffill())

True
0    10.0
1    13.0
2    21.0
3    17.0
4    28.0
5    19.0
6    33.0
7    21.0
8    27.0
dtype: float64
0    10.0
1    13.0
2    13.0
3    17.0
4    28.0
5    19.0
6    33.0
7    33.0
8    27.0
dtype: float64

|函数|含义|说明| |:-:|:-:|:-:| |s.dtypes|检查数据类型|| |s.astype|类型强制转换|| |pd.to_datetime|转日期时间类型|| |s.factorize|因子化转换|| |s.sample|抽样|| |s.where|基于条件判断的值替换|| |s.replace|按值替换|不可使用正则| |s.str.replace|按值替换|可使用正则| |s.str.split|字符分割||

income = pd.Series(['12500元', '8000元', '8500元', '15000元', '9000元'])

# 将收入转化为整形
print(income.str[:-1].astype(int))

gender = pd.Series(['男', '女', '女', '女', '男', '女'])
# 性别因子化处理
print(gender.factorize())

house = pd.Series(['大宁金茂府 | 3室2厅 | 158.32平米 | 南 | 精装',
                   '昌里花园 | 2室2厅 | 104.73平米 | 南 | 精装',
                   '纺大小区 | 3室1厅 | 68.38平米 | 南 | 简装'])
# 取出二手房的面积,并转换为浮点型
house.str.split('|').str[2].str.strip().str[:-2].astype(float)

0    12500
1     8000
2     8500
3    15000
4     9000
dtype: int64
(array([0, 1, 1, 1, 0, 1]), Index(['男', '女'], dtype='object'))

0    158.32
1    104.73
2     68.38
dtype: float64

数据筛选

|函数|含义|说明| |:-:|:-:|:-:| |s.isin|成员关系判断|| |s.between|区间判断|| |s.loc|条件判断|可使用在数据框中| |s.iloc|索引判断|可使用在数据框中| |s.compress|条件判断|已废弃,使用 series[Condition]代替 |s.nlargest|搜寻最大的n个元素|| |s.nsmallest|搜寻最小的n个元素|| |s.str.findall|子串查询|可使用正则|

np.random.seed(2020)
x = pd.Series(np.random.randint(10, 20, 10))
print(x)

# 筛选出 16 以上的元素
print(x.loc[x > 16])
print(x[x > 16]) 

# 筛选出 13~16 之间的元素
print(x[x.between(13, 16)])

# 取出最大的三个元素
print(x.nlargest(3))

y = pd.Series(['ID:1 name:张三 age:24 income:13500',
               'ID:2 name:李四 age:27 income:25000',
               'ID:3 name:王二 age:21 income:8000'])
# 取出年龄,并转换为整数
print(y.str.findall('age:(d+)').str[0].astype(int))


0    10
1    18
2    13
3    16
4    13
5    13
6    17
7    18
8    10
9    10
dtype: int64
1    18
6    17
7    18
dtype: int64
1    18
6    17
7    18
dtype: int64
2    13
3    16
4    13
5    13
dtype: int64
1    18
7    18
6    17
dtype: int64
0    24
1    27
2    21
dtype: int64

绘图与元素级函数

|函数|含义|说明| |:-:|:-:|:-:| |s.hist|绘制直方图|| |s.plot|可基于kind参数绘制更多图形|饼图、折线图、箱线图等| |s.map|元素映射|| |s.apply|基于自定义函数的元素级操作||

np.random.seed(2020)
import matplotlib.pyplot as plt

x = pd.Series(np.random.normal(10, 3, 1000))

# 绘制 x 直方图
x.hist()
# 显示图形
plt.show()

# 绘制 x 的箱线图
x.plot(kind='box')
plt.show()

installs = pd.Series(['1280万', '6.7亿', '248万', '1892万', '9877', '9877万', '1.2亿'])
# 将安装量统一更改为‘万’的单位
def transform(x):
    if x.find('亿') != -1:
        res = float(x[:-1]) * 10000
    elif x.find('万') != -1:
        res = float(x[:-1])
    else:
        res = float(x) / 10000
    return res

installs.apply(transform)

32b1933852dff69e072f20242e0fca53.png

965f4f43141e35b0787af8255433f7ed.png
0     1280.0000
1    67000.0000
2      248.0000
3     1892.0000
4        0.9877
5     9877.0000
6    12000.0000
dtype: float64

时间序列函数

|函数|含义|说明| |:-:|:-:|:-:| |s.dt.date|抽取出日期值|s为日期时间型序列, 年-月-日| |s.dt.time|抽取出时间|时:分:秒| |s.dt.year|抽取出年|| |s.dt.month|抽取出月|| |s.dt.day|抽取出日|| |s.dt.hour|抽取出时|| |s.dt.minute|抽取出分钟|| |s.dt.second|抽取出秒|| |s.dt.quarter|抽取出季度|| |s.dt.weekday|抽取出星期几|返回数值型| |s.dt.weekday_name|抽取出星期几|返回字符型| |s.dt.week|抽取出年终的第几周|| |s.dt.dayofyear|抽取出年中的第几天|| |s.dt.dayinmonth|抽取出月对应的最大天数|| |s.dt.is_month_start|判断日期是否为当月的第一天|| |s.dt.is_month_end|判断日期是否为当月的最后一天|| |s.dt.is_quarter_start|判断日期是否为当季度的第一天|| |s.dt.is_quarter_end|判断日期是否为当季度的最后一天|| |s.dt.is_year_start|判断日期是否为当年的第一天|| |s.dt.is_year_end|判断日期是否为当年的最后一天|| |s.dt.is_leap_year|判断日期是否为闰年||

其他函数

|函数|含义|说明| |:-:|:-:|:-:| |s.append|序列元素的追加|需指定其他序列| |s.diff|一阶差分|| |s.round|元素的四舍五入|| |s.sort_values|按值排序|| |s.sort_index|按索引排序|| |s.to_dict|转为字典|| |s.tolist|转为列表|| |s.unique|元素去重||

import numpy as np
import pandas as pd

np.random.seed(2020)
x = pd.Series(np.random.randint(8,18,6))
print(x)

# 对x中的元素做一阶差分
print(x.diff())

# 对x中的元素做降序处理
print(x.sort_values(ascending = False))

y = pd.Series(np.random.randint(8,16,100))
# 将y中的元素做排重处理,并转换为列表对象
print(y)
print(y.unique().tolist())

0     8
1    16
2    11
3    14
4    11
5    11
dtype: int64
0    NaN
1    8.0
2   -5.0
3    3.0
4   -3.0
5    0.0
dtype: float64
1    16
3    14
5    11
4    11
2    11
0     8
dtype: int64
0     15
1      8
2     13
3      8
4      8
5      8
6     10
7      9
8     11
9     11
10    15
11    10
12    14
13    11
14    14
15    13
16     8
17    12
18    12
19     8
20    14
21    12
22     9
23     9
24    15
25    13
26    10
27     9
28    14
29    13
      ..
70    11
71    10
72     8
73     8
74    15
75    14
76    12
77    14
78    14
79    10
80    12
81    14
82    14
83    13
84     8
85    15
86     9
87     9
88    15
89     9
90    13
91     9
92    15
93     9
94     8
95     9
96    15
97    10
98    11
99    13
Length: 100, dtype: int64
[15, 8, 13, 10, 9, 11, 14, 12]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值