0%

python-pandas常用方法

python-pandas

  1. pd.cut()

    1
    pd.cut( x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', )

    x : 一维数组(对应前边例子中提到的销售业绩)

    bins :整数,标量序列或者间隔索引,是进行分组的依据,

    • 如果填入整数n,则表示将x中的数值分成等宽的n份(即每一组内的最大值与最小值之差约相等);
    • 如果是标量序列,序列中的数值表示用来分档的分界值
    • 如果是间隔索引,“ bins”的间隔索引必须不重叠

    right :布尔值,默认为True表示包含最右侧的数值

    • 当“ right = True”(默认值)时,则“ bins”=[1、2、3、4]表示(1,2],(2,3],(3,4]
    • bins是一个间隔索引时,该参数被忽略。

    labels : 数组或布尔值,可选.指定分箱的标签

    • 如果是数组,长度要与分箱个数一致,比如“ bins”=[1、2、3、4]表示(1,2],(2,3],(3,4]一共3个区间,则labels的长度也就是标签的个数也要是3
    • 如果为False,则仅返回分箱的整数指示符,即x中的数据在第几个箱子里
    • 当bins是间隔索引时,将忽略此参数

    retbins: 是否显示分箱的分界值。默认为False,当bins取整数时可以设置retbins=True以显示分界值,得到划分后的区间

    precision:整数,默认3,存储和显示分箱标签的精度。

    include_lowest:布尔值,表示区间的左边是开还是闭,默认为false,也就是不包含区间左边。

    duplicates:如果分箱临界值不唯一,则引发ValueError或丢弃非唯一

    ok,所有参数的含义与作用就是这些了,纯文字解释怎么都不如代码跑一遍来的直观,我们在代码中实现一下再结合上述文字解释就很容易理解了。而且并不是所有参数都是常用的,有些参数很少用到!

  2. pd.insert()

    把value插入dataframe的指定位置loc中,若插入的数据value已在DataFrame中,则返回 错误ValueError,如想完成重复值的插入需要把allow_duplicates设置为True

    loc :参数column插入的位置,如果想插入到第一例则为0,取值范围: 0 <= loc <= len(columns),其中len(columns)为Dataframe的列数注意:这个参数没有-1

    column :给 插入数据value取列名,可为数字,字符串等

    value :可以是整数,Series或者数组等

    allow_duplicates : 默认 False

  3. pd.max():求最大值

  4. pd.min():求最小值

  5. pd.mean():求平均值

  6. pd.sum() :求和

  7. pd.std(): 标准差

  8. pd.groupby()

    我们现在根据员工进行groupby分组,得到的一个DataFrameGroupBy对象

    根据某一个或一组属性分组,得到一个dataframegroupby对象

    1
    2
    groupbying = df.groupby(by="employees")  
    # by可以省略
    1
       

    分组之后,可以进行后续的各种聚合操作

    1
    2
    3
    4
    groupbying.max()
    groupbying.min()
    groupbying.mean()
    groupbying.median()

    pd.groupby()还支持组迭代

    1
    2
    3
    for name,group in groupbying:  # 遍历.DataFrameGroupBy对象
    print(name)
    print(group)

    对DataFrameGroupBy对象使用get_group()方法,能够让我们得到分组元素中的指定组的数据

    分组之后对同一个列名使用不同的函数,函数使用列表形式:下面 表示的是对score分别求和、最大值、最小值、均值、个数(size)

    1
    df9 = df.groupby("employees")["score"].agg(["sum","max","min","mean","size"]).reset_index()
  9. pd.agg()

    聚合操作:可以指定一个列或者多个列分别使用不同的聚合函数来聚合。

    对单个列进行聚合操作:

    1
    2
    3
    # df.groupby("employees")["salary"].sum  
    # 如果只是单个元素,上下两种写法等价
    df.groupby("employees").agg({"salary":"sum"})

    一般情况下,结果是一个以分组字段为行索引的数据帧,那如果我们也想把这个行索引变成数据帧中的一个列名属性,使用reset_index完成:

    1
    df9 = df.groupby("employees")["score"].agg(["sum","max","min","mean","size"]).reset_index()

    对多个列使用不同的聚合函数,比如:我们想对salry求和、对score求均值,使用字段对的方式来实现

    1
    2
    3
    4
    salary_score = df.groupby("employees").agg({"salary":"sum",
    "score":"mean"
    })
    salary_score

    详细地解释下上面的一行代码的各个函数功能:

    1. groupby:指定分组的列名字段
    2. agg:指定列名和想实施的聚合函数
    3. reset_index:对生成的数据帧进行索引重置
    4. rename:对生成的列名进行修改;上面是手动指定,需要全部列出来;rename可以对我们想要修改的列名进行重命名
  10. pd.pivot_table()

    数据透视表:

    • 数据分类汇总
    • 变量聚合运算
    • “长表”转化为“宽表
    1
    2
    pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', 
    fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)
    • data:数据集
    • values:要聚合的列,默认情况下对所有数值型变量聚合
    • index:要在数据透视表上分组的变量,可设置多个列,实现多层分组
    • columns:要在数据透视表上分组的变量,注意其每个取值作为1列,实现“长表”转化为“宽表”
    • aggfunc: 对values进行计算,默认为np.mean
    • fill_value:要用来替换缺失值的值(在聚合后生成的数据透视表中)。
    • sort: 布尔型,默认True. 是否将结果排序

    index相当于数据透视表的“行”或理解为数据透视表的key,可以有多个key;values相当于数据透视表的“列”;columns相当于把列再进一步细分,也是实现“长表”转“宽表”的关键;aggfunc是对聚合在i行j列的n个数据进行运算。多层嵌套:多个index组合可实现“行”的多层分类;values+columns组合可实现“列”的多层分类。

    数据透视表实例

  11. pd.crosstab()

    交叉表是一种用于计算分组频率的特殊透视图,对数据进行汇总。与许多计算分组汇总统计信息的函数一样,crosstab()可以处理分类数据。它可用于将两个或多个变量分组,并为每组的给定值执行计算。

    函数接受两个或多个列表、pandas series 或dataframe,默认情况下返回每个组合的频率。我总是喜欢从一个例子开始,这样你可以更好地理解定义,然后我将继续解释语法。

    crosstab()总是返回一个数据帧,实例:

    1
    pd.crosstab(index=diamonds['cut'], columns=diamonds['color'])

    查看每个组合的平均价格。crosstab()提供values参数来引入第三个要聚合的数值变量:

    pd.crosstab(index=diamonds[‘cut’],
    columns=diamonds[‘color’],
    values=diamonds[‘price’],
    aggfunc=np.mean).round(0)

  12. pd.apply()

    apply() 使用时,通常放入一个 lambda 函数表达式、或一个函数作为操作运算

    1
    DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds
    • func 代表的是传入的函数或 lambda 表达式;

    • axis 参数可提供的有两个,该参数默认为0/列

      ​ 0 或者 index ,表示函数处理的是每一列;

      ​ 1 或 columns ,表示处理的是每一行;

    • raw ;bool 类型,默认为 False;

      ​ False ,表示把每一行或列作为 Series 传入函数中;

      ​ True,表示接受的是 ndarray 数据类型;

    apply() 最后的是经过函数处理,数据以 Series 或 DataFrame 格式返回。