学会这些好用的pandas函数,让你的数据处理更快人一步

如果要获取总分排名前10的学生信息,大家可能会按照总分排序然后head(10)来操作一番,但是如果遇到同排名的情况导致前10的学生数超过10个肿么办呢?

今天,我们就来看看pandas都提供了哪些便捷的函数方法,让我们数据处理快人一步~

目录:

  • 1. 求最大或最小的前N组数据

  • 2. 求当前元素和前一元素间变化率

  • 3. 将列表中每个元素转化为一行

1. 求最大或最小的前N组数据

我们在进行数据处理的时候,往往会遇到一个场景,那就是求这组数据中最大或最小的前N组数据。一般情况下,我们可能会采用 df.sort_values(columns, ascending=False).head(n)来求取,但是往往存在一些并列排名的数据会被无情的截断而获取不到。那么,今天我们可以试试以下方法,也会就好了。

以下我们用求取最大的前N组数据为例进行介绍:

DataFrame.nlargest(n,columns,keep='first')Series.nlargest(n=5,keep='first')

keep参数可选值:默认为 first,可选 last 和 all (字面意思)

我们先构造一个案例数据

>>> import pandas as pd>>> df = pd.DataFrame({'population': [59000000, 65000000, 434000,...                                   434000, 434000, 337000, 11300,...                                   11300, 11300],...                    'GDP': [1937894, 2583560 , 12011, 4520, 12128,...                            17036, 182, 38, 311],...                    'alpha-2': ['IT', 'FR', 'MT', 'MV', 'BN',...                                'IS', 'NR', 'TV', 'AI']},...                   index=['Italy', 'France', 'Malta',...                          'Maldives', 'Brunei', 'Iceland',...                          'Nauru', 'Tuvalu', 'Anguilla'])

>>> df          population      GDP alpha-2Italy       59000000  1937894      ITFrance      65000000  2583560      FRMalta         434000    12011      MTMaldives      434000     4520      MVBrunei        434000    12128      BNIceland       337000    17036      ISNauru          11300      182      NRTuvalu         11300       38      TVAnguilla       11300      311      AI

对于上述案例数据,如果我们想获取population字段最多的前3组数据,发现第三名都是434000。如果采用head(3),实际有2个满足要求的数据行被我们漏掉了;这个时候使用df.nlargest(3, 'population',keep='all'),即可获取我们需要的结果。

>>> df.head(3)
        population      GDP alpha-2
Italy     59000000  1937894      IT
France    65000000  2583560      FR
Malta       434000    12011      MT

>>> df.nlargest(3, 'population')
        population      GDP alpha-2
France    65000000  2583560      FR
Italy     59000000  1937894      IT
Malta       434000    12011      MT
# keep = 'all' 即表示满足排名的全部返回
>>> df.nlargest(3, 'population',keep='all')
          population      GDP alpha-2
France      65000000  2583560      FR
Italy       59000000  1937894      IT
Malta         434000    12011      MT
Maldives      434000     4520      MV
Brunei        434000    12128      BN

当然,我们可能面临更复杂的需求,比如按照多个字段取最大的前N组数据,这个案例中我们要取population最多的中GDP前三的数据。

>>> df.nlargest(3, ['population', 'GDP'])        population      GDP alpha-2France    65000000  2583560      FRItaly     59000000  1937894      ITBrunei      434000    12128      BN

对于最小的前N组数据,函数如下(参数含义同):

DataFrame.nsmallest(n,columns,keep='first')Series.nsmallest(n=5,keep='first')

2. 求当前元素和前一元素间变化率

有时候,我们的数据可能是时间序列下的,为了更方便看到随着时间变化某行或列数据的变化率,这里就可以采用pct_change方法直接获取。

pct_change(periods=1,fill_method='pad',limit=None,freq=None,kwargs)

先看看对于Series类型数据:

>>> s = pd.Series([90, 91, 85])
>>> s.pct_change()
0         NaN
1    0.011111
2   -0.065934
dtype: float64
# 设置间隔periods=2,在这里就是85相比90的变化率
>>> s.pct_change(periods=2)
0         NaN
1         NaN
2   -0.055556
dtype: float64

对于有缺失值的情况,我们可以填充缺失值后参与计算或者在计算百分比时设置填充参数fill_method

>>> s = pd.Series([90, 91, None, 85])>>> s0    90.01    91.02     NaN3    85.0dtype: float64

>>> s.pct_change(fill_method='bfill')0         NaN1    0.0111112   -0.0659343    0.000000dtype: float64

>>> s.pct_change(fill_method='ffill')0         NaN1    0.0111112    0.0000003   -0.065934dtype: float64

>>> s.pct_change()0         NaN1    0.0111112    0.0000003   -0.065934dtype: float64

也可以直接对Dataframe类型数据进行处理:

>>> df = pd.DataFrame({
...     'FR': [4.0405, 4.0963, 4.3149],
...     'GR': [1.7246, 1.7482, 1.8519],
...     'IT': [804.74, 810.01, 860.13]},
...     index=['1980-01-01', '1980-02-01', '1980-03-01'])
>>> df
                FR      GR      IT
1980-01-01  4.0405  1.7246  804.74
1980-02-01  4.0963  1.7482  810.01
1980-03-01  4.3149  1.8519  860.13

>>> df.pct_change()
                  FR        GR        IT
1980-01-01       NaN       NaN       NaN
1980-02-01  0.013810  0.013684  0.006549
1980-03-01  0.053365  0.059318  0.061876

>>> df = pd.DataFrame({
...     '2016': [1769950, 30586265],
...     '2015': [1500923, 40912316],
...     '2014': [1371819, 41403351]},
...     index=['GOOG', 'APPL'])
>>> df
          2016      2015      2014
GOOG   1769950   1500923   1371819
APPL  30586265  40912316  41403351
# 对行进行操作axis=1或'columns'
>>> df.pct_change(axis = 1)
      2016      2015      2014
GOOG   NaN -0.151997 -0.086016
APPL   NaN  0.337604  0.012002

>>> df.pct_change(axis = 'columns')
      2016      2015      2014
GOOG   NaN -0.151997 -0.086016
APPL   NaN  0.337604  0.012002

3. 将列表中每个元素转化为一行

有时候,我们的原始数据中某些元素可能是列表的形式,而我们需要对它进行展开操作,于是explode方法就来了。

Series.explode(ignore_index=False)DataFrame.explode(column,ignore_index=False)

先看看对Series类型数据的处理:

>>> s = pd.Series([[1, 2, 3], 'foo', [], [3, 4]])
>>> s
0    [1, 2, 3]
1          foo
2           []
3       [3, 4]
dtype: object
# 默认情况下,会复制索引
>>> s.explode()
0      1
0      2
0      3
1    foo
2    NaN
3      3
3      4
dtype: object
# 设置参数ignore_index=True,则会重置索引
>>> s.explode(ignore_index=True)
0      1
1      2
2      3
3    foo
4    NaN
5      3
6      4
dtype: object

再看看在Dataframe类型数据下的操作:

>>> df = pd.DataFrame({'A': [[1, 2, 3], 'foo', [], [3, 4]], 'B': 1})>>> df           A  B0  [1, 2, 3]  11        foo  12         []  13     [3, 4]  1# 默认情况下,会复制索引>>> df.explode('A')     A  B0    1  10    2  10    3  11  foo  12  NaN  13    3  13    4  1# 设置参数ignore_index=True,则会重置索引>>> df.explode('A',ignore_index=True)     A  B0    1  11    2  12    3  13  foo  14  NaN  15    3  16    4  1

以上就是本次的全部内容,希望能带给大家帮助~

(0)

相关推荐

  • (5条消息) pandas中category类型的数据处理

    pandas中category类型的数据 用途和特点 常见的问题处理 Categorical 数据 用途和特点 category是pandas中定义的一个数据类型,相当于R中的因子.可以对特点的类型数 ...

  • 一起学习Python常用模块——pandas

    作者介绍 @王多鱼 百度的一名推荐算法攻城狮. 主要负责推荐的召回和排序模型的优化工作. 1 前言 Pandas 是Python的一个数据分析包,它是为了解决数据分析任务而创建的.Pandas 纳入了 ...

  • 总结了这67个pandas函数,完美解决数据处理,拿来即用

    不管是业务数据分析 ,还是数据建模.数据处理都是及其重要的一个步骤,它对于最终的结果来说,至关重要. 今天,就为大家总结一下 "Pandas数据处理" 几个方面重要的知识,拿来即用 ...

  • 素描静物学会用纸擦调子,考试肯定快人一步

    各位小伙伴在学素描 一般都离不开静物素描 那么 我们在画素描静物的时候 除了用画笔之外 这些辅助工具你一定要用过 比如: 纸擦笔 纸巾 (所以每个美术生身上都有一包纸巾) 作为一个正宗的美术生 我认为 ...

  • 野钓不打窝的2种高效钓法,学会后上鱼总是快人一步

    大部分情况下,钓鱼还是得打窝,有句话叫做"要想鱼上岸得拿粮食换",我个人觉得还是很有道理的.但是各位钓友千万不要忘记两件事:1.不是所有的鱼情都适合打窝:2.不打窝不代表钓不多. ...

  • 学会这些办公小Tips,让你快人一步

    如果你还不知道如何在图片上添加文字,Word中一些神奇的快捷键,以及如何制作九宫格图片,那就快来学习一下吧~ #01 给图片添加文字 首先点击上方插入,在图片上插入一个文本框,输入内容,并调整好格式. ...

  • 一个案例学会了10个常用文本函数,结合实际学的快!

    商品编码规则类别+_+3位编号,现在我们要提取类别,可以使用LEFT函数处理 =LEFT(A2,2) LEFT函数: 1.语法:LEFT(文本,[从左边截取的长度]) 2.说明:截取长度可以不写,默认 ...

  • 超全的 100 个 Pandas 函数汇总,建议收藏

    来源丨吊车尾学院 今天给大家整理了100个Pandas常用的函数. 分别分为6类:统计汇总函数.数据清洗函数.数据筛选.绘图与元素级运算函数.时间序列函数和其他函数. 统计汇总函数 函数 含义 min ...

  • excel新手,学会这3个功能与函数,轻松解决80%的问题

    Hello,大家好,最近总是有好多人问到:自己是excel新手,日常工作中需要掌握哪些功能,才能提高工作效率? 我问过后发现它们需要处理的数据量都是特别的大,大多数遇到的都是一些简单的数据核对,查找, ...

  • 这20个Pandas函数,堪称'数据清洗'杀手!

    今天准备介绍一篇超级肝货! Pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的.它提供了大量能使我们快速便捷地处理数据的函数和方法. 本文介绍的这20个[被分成了15组]函 ...

  • 秒懂!图解4个实用的Pandas函数!

    在用Python进行机器学习或者日常的数据处理中,Pandas是最常用的Python库之一,熟练掌握pandas是每一个数据科学家的必备技能,本文将用代码+图片详解Pandas中的四个实用函数! 1 ...