Pandas常用操作

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个数的积
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值