本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

Pandas常用操作

Pandas中提供了许多函数,可以帮我们快速处理数据。这里我们来讲一下Pandas的一些常用操作。

apply函数:

apply函数可以将每行或者每列的数据,放到某个函数中进行处理。比如要获取所有列的最大值,那么通过apply函数就非常容易的实现。比如有以下DataFrame结构的数据。

import numpy as np import pandas as pd df = pd.DataFrame(np.random.randn(5,4) - 1) print(df)

输出结果为:

        0	        1	        2	        3
0	-1.392550	-2.303422	-1.842063	-3.295022
1	0.536343	-1.594769	-1.213821	-1.235229
2	0.187501	-1.256436	-0.175250	0.006346
3	-0.678881	-1.280859	-2.835340	-2.012439
4	0.742178	-0.613463	-0.644243	0.927003

如果想要求所有列的最大值,那么通过以下代码就可以实现:

df.apply(lambda x: x.max())

输出结果为:

0    0.742178
1   -0.613463
2   -0.175250
3    0.927003
dtype: float64

apply默认的axis参数(轴)是等于0,也就是代表列。如果想要求行的最大值,那么可以通过设置axis=1来实现。示例代码如下:

df.apply(lambda x: x.max(), axis=1)

输出结果为:

0   -1.392550
1    0.536343
2    0.187501
3   -0.678881
4    0.927003
dtype: float64

applymap函数:

apply可以一次性处理行和列的数据,而如果想要批量处理DataFrame的所有数据,比如给每个数据都乘以10,那么可以通过applymap来实现。示例代码如下:

df.applymap(lambda x: x*10)

输出结果为:

        0	        1	        2	        3
0	-13.925498	-23.034218	-18.420631	-32.950220
1	5.363431	-15.947688	-12.138206	-12.352289
2	1.875006	-12.564360	-1.752497	0.063457
3	-6.788815	-12.808594	-28.353398	-20.124392
4	7.421781	-6.134635	-6.442430	9.270026

排序:

排序主要是分为两个。一个是按照某个列排序,另外一个是按照索引排序。下面分别来进行讲解。

1. 按照列排序:

按照列进行排序,是使用sort_values,可以传递ascending参数,用来指定排序方法。如果ascending=False,那么将按照降序排序,否则按照升序排序,默认是升序排序。示例代码如下:

df.sort_values("0", ascending=False)

2. 按照索引排序:

按照索引排序用的是sort_index,用法与sort_values类似。但是因为索引只有一列,因此不需要额外指定排序的字段。示例代码如下:

df.sort_index(ascending=False)

数据运算:

1. 算术运算:

  • add(other):
    比如想要将Series中的每一个数据都加1,那么可以使用以下方式来实现:
data['open'].add(1) 2018-02-27 24.53 2018-02-26 23.80 2018-02-23 23.88 2018-02-22 23.25 2018-02-14 22.49
  • sub(other):
    相减。比如想要知道每天的涨跌大小,那么可以通过以下代码实现:
# 1、筛选两列数据 close = data['close'] open = data['open'] # 2、收盘价减去开盘价 data['m_price_change'] = close.sub(open) # 或者是 data['m_price_change'] = close - open data.head() open high close low volume price_change p_change turnover my_price_change 2018-02-27 23.53 25.88 24.16 23.53 95578.03 0.63 2.68 2.39 0.63 2018-02-26 22.80 23.78 23.53 22.80 60985.11 0.69 3.02 1.53 0.73 2018-02-23 22.88 23.37 22.82 22.71 52914.01 0.54 2.42 1.32 -0.06 2018-02-22 22.25 22.76 22.28 22.02 36105.01 0.36 1.64 0.90 0.03 2018-02-14 21.49 21.99 21.92 21.48 23331.04 0.44 2.05 0.58 0.43

2. 逻辑运算:

  • 逻辑运算符号<、 >、|、 &
    比如我们想要,筛选p_change > 2并且open > 15的值。代码如下:
data[(data['p_change'] > 2) & (data['open'] > 15)] open high close low volume price_change p_change turnover my_price_change 2017-11-14 28.00 29.89 29.34 27.68 243773.23 1.10 3.90 6.10 1.34 2017-10-31 32.62 35.22 34.44 32.20 361660.88 2.38 7.42 9.05 1.82 2017-10-27 31.45 33.20 33.11 31.45 333824.31 0.70 2.16 8.35 1.66 2017-10-26 29.30 32.70 32.41 28.92 501915.41 2.68 9.01 12.56 3.11
  • query函数:
    通过query函数,上例中的实现将更加简单。
data.query("p_change > 2 & turnover > 15")
  • isin函数:
    例如判断’turnover’是否为4.19, 2.39。代码如下:
# 可以指定值进行一个判断,从而进行筛选操作 data[data['turnover'].isin([4.19, 2.39])] open high close low volume price_change p_change turnover my_price_change 2018-02-27 23.53 25.88 24.16 23.53 95578.03 0.63 2.68 2.39 0.63 2017-07-25 23.07 24.20 23.70 22.64 167489.48 0.67 2.91 4.19 0.63 2016-09-28 19.88 20.98 20.86 19.71 95580.75 0.98 4.93 2.39 0.98 2015-04-07 16.54 17.98 17.54 16.50 122471.85 0.88 5.28 4.19 1.00

3. 统计函数:

函数名 描述
count 非空值的个数
sum 求和
mean 平均值
median 中位数
min 最小值
max 最大值
abs 绝对值
prod 数组元素的乘积
std 标准差
var 方差
idxmax 最大值的位置
idxmin 最小值的位置

4. 累计函数:

函数 描述
cumsum 计算前1/2/3/…/n个数的和
cummax 计算前1/2/3/…/n个数的最大值
cummin 计算前1/2/3/…/n个数的最小值
cumprod 计算前1/2/3/…/n个数的积

1446人已阅读,今天你学习了吗?

添加新回复
目录