Pandas数据处理——盘点那些常用的函数(上)
在之前的文章中,以图文的方式详细讲解了Pandas中groupby
,merge
以及map
、apply
、applymap
的原理,掌握好这些原理,再在这个基础上进行一些拓展,基本就可以解决绝大部分比较复杂的数据处理操作了。几篇文章如下,想回看的小伙伴可以再重温一下:
- Pandas数据处理三板斧——map、apply、applymap详解
- Pandas数据分析——超好用的Groupby详解
- Pandas数据分析——Merge数据拼接图文详解
- 提速百倍的Pandas性能优化方法,让你的Pandas飞起来!
这篇文章为大家整理一下实际使用中比较高频的一些用法,当然还会有一篇关于时间序列处理的文章。在这里需要强调一点就是,不建议初学者上来就把Pandas中所有的方法都啃一遍,这样效率太低而且很多方法平时基本用不到,啃下来也容易忘。正确的方式是先把常用的方法先吃透,然后找个项目直接上手,遇到现有方法处理不了的再查看官方文档。
通过”人工智能“的方式,我从官方文档中筛选出一些比较常用的方法,有二十多个,初学者可以先试着把这些吃透了。为了避免过多看不下去,这篇文章就先介绍10个。
用于演示的数据如下:
In [15]: data
Out[15]:
company salary age
0 NaN 43 21
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
5 C 20 18
6 A 48 43
7 B 25 23
8 B 39 18
.head()
作用对象:Series
和DataFrame
主要用途:返回DataFrame
的前N行。当数据量较大时,使用.head()
可以快速对数据有个大致了解。
用法:
#默认返回前5行,N可以自行设定
In [16]: data.head()
Out[16]:
company salary age
0 NaN 43 21
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
.info()
作用对象:Series
和DataFrame
主要用途:打印所用数据的一些基本信息,包括索引和列的数据类型和占用的内存大小。
用法:
In [17]: data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9 entries, 0 to 8
Data columns (total 3 columns):
company 8 non-null object
salary 9 non-null int32
age 9 non-null int32
dtypes: int32(2), object(1)
memory usage: 224.0+ bytes
.describe()
作用对象:Series
和DataFrame
主要用途:生成描述性统计汇总,包括数据的计数和百分位数,有助于了解大致的数据分布
用法:
# 默认生成数值列的描述性统计
# 使用 include = 'all'生成所有列
In [18]: data.describe()
Out[18]:
salary age
count 9.000000 9.000000
mean 31.777778 27.111111
std 12.804079 9.143911
min 8.000000 18.000000
25% 25.000000 21.000000
50% 33.000000 26.000000
75% 42.000000 28.000000
max 48.000000 43.000000
.value_counts()
作用对象:Series
主要用途:统计分类变量中每个类的数量,比如company
中各个公司都有多少人
主要参数:
- normalize (boolean, default False)
返回各类的占比 - sort (boolean, default True)
是否对统计结果进行排序 - ascending (boolean, default False)
是否升序排列
用法:
In [19]: data['company'].value_counts()
Out[19]:
A 4
B 2
C 2
Name: company, dtype: int64
# 返回占比情况
In [20]: data['company'].value_counts(normalize=True)
Out[20]:
A 0.50
B 0.25
C 0.25
Name: company, dtype: float64
# 升序排列
In [21]: data['company'].value_counts(ascending=True)
Out[21]:
C 2
B 2
A 4
Name: company, dtype: int64
.isna()
作用对象:Series
和DataFrame
主要用途:判断数据是否为缺失值,是的话返回True
,否的话返回False
用法:
In [22]: data.isna()
Out[22]:
company salary age
0 True False False
1 False False False
2 False False False
3 False False False
4 False False False
5 False False False
6 False False False
7 False False False
8 False False False
.any()
作用对象:Series
和DataFrame
主要用途:大多数情况下数据量较大,不可能直接isna()
后一个一个看是否是缺失值。any()
和isna()
结合使用可以判断某一列是否有缺失值。
用法:
In [23]: data.isna().any()
Out[23]:
company True
salary False
age False
dtype: bool
.dropna()
作用对象:Series
和DataFrame
主要用途:删掉含有缺失值的数据
用法:
In [24]: data.dropna()
Out[24]:
company salary age
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
5 C 20 18
6 A 48 43
7 B 25 23
8 B 39 18
.fillna()
作用对象:Series
和DataFrame
主要用途:填充缺失数据
主要参数:
- value (scalar, dict, Series, or DataFrame)
用于填充缺失值的值 - method ({‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None)
缺失值的填充方式,常用的是bfill
后面的值进行填充,ffill
用前面的值进行填充 - inplace (boolean, default False)
是否作用于原对象
用法:
In [26]: data.fillna('B')
Out[26]:
company salary age
0 B 43 21
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
5 C 20 18
6 A 48 43
7 B 25 23
8 B 39 18
# 用缺失值后面的值来填充(这里NaN后面是'A')
In [25]: data.fillna(method='bfill')
Out[25]:
company salary age
0 A 43 21
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
5 C 20 18
6 A 48 43
7 B 25 23
8 B 39 18
.sort_index()
作用对象:Series
和DataFrame
主要用途:对数据按照索引进行排序
主要参数:
- ascending (boolean, default True)
是否升序排列 - inplace (boolean, default False)
是否作用于原对象
用法:
# 按索引降序排列
In [27]: data.sort_index(ascending=False)
Out[27]:
company salary age
8 B 39 18
7 B 25 23
6 A 48 43
5 C 20 18
4 A 33 26
3 C 42 28
2 A 28 26
1 A 8 41
0 NaN 43 21
.sort_values()
作用对象:Series
和DataFrame
主要用途:对DataFrame
而言,按照某列进行排序(用by
参数控制),对Series
按数据列进行排序。
主要参数:
- by (str or list of str)
作用于DataFrame
时需要指定排序的列 - ascending (boolean, default False)
是否升序排列
In [28]: data.sort_values(by='salary')
Out[28]:
company salary age
1 A 8 41
5 C 20 18
7 B 25 23
2 A 28 26
4 A 33 26
8 B 39 18
3 C 42 28
0 NaN 43 21
6 A 48 43
相关文章:
- Pandas数据处理三板斧——map、apply、applymap详解
- Pandas数据分析——超好用的Groupby详解
- Pandas数据处理——玩转时间序列数据
- Pandas数据分析——Merge数据拼接图文详解
- Pandas数据处理——盘点那些常用的函数(下)
- 天秀!Pandas还能用来写爬虫?
- 提高数据的颜值!一起看看Pandas中的那些Style
- 提速百倍的Pandas性能优化方法,让你的Pandas飞起来!
转自https://zhuanlan.zhihu.com/p/106722583