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个数的积 |