• 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)
    
    • 1
    • 2
    • 3
    • 4

    输出结果为:

            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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    输出结果为:

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

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

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

    输出结果为:

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

    applymap函数:

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

    df.applymap(lambda x: x*10)
    
    • 1

    输出结果为:

            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
    • 2
    • 3
    • 4
    • 5
    • 6

    排序:

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

    1. 按照列排序:

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

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

    2. 按照索引排序:

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

    df.sort_index(ascending=False)
    
    • 1

    数据运算:

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • query函数:
      通过query函数,上例中的实现将更加简单。
    data.query("p_change > 2 & turnover > 15")
    
    • 1
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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个数的积
  • 相关阅读:
    .NET Aspire 预览版 6 发布
    Asp.net MVC中文件夹中的控制器如何跳转到根目录的控制器中?
    【杂记】全栈开发中碰到的一些问题及解决方法
    初学python100例-案例36 季节判断器 少儿编程python编程实例讲解
    idea pom导入net.sf.json的jar包失败
    延迟式垃圾回收机制的缺陷
    MySQL表的增删改查(进阶)
    Java开源工具库使用之虚假数据生成库datafaker
    sqlserver 联表查询、子查询、窗口函数、聚合函数等概念与例子
    C# Linq增强扩展MoreLinq之Acquire
  • 原文地址:https://blog.csdn.net/qq_41404557/article/details/125899020