zoukankan      html  css  js  c++  java
  • pandas 学习 第7篇:DataFrame

    DataFrame的这些操作和Series很相似,这里简单介绍一下。

    一,应用和应用映射

    apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数:

    DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
    DataFrame.applymap(self, func)

    定义一个函数fun,使用apply()函数把fun应用到由DataFrame对象的列构成的一维数组上,通常fun函数是由聚合函数构成的。

    f=lambda x: x.max()-x.min
    df.apply(f)

    定义一个函数foo,使用applymap()函数把函数foo应用于DataFrame对象的各个元素上,

    foo=lambda x: '%.2f' % x
    df.applymap(foo)

    转换数据,调用函数对循环对数据元素进行处理:

    DataFrame.transform(self, func, axis=0, *args, **kwargs)

    二,操作索引

    操纵索引包括:重索引、设置索引、替换轴的索引、重置索引

    1,重索引 

    重索引是指数据框按照新的索引进行排列:

    DataFrame.reindex(self, labels=None, index=None, columns=None, axis=None, 
    method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)

    参数注释:

    • labels:array-like,新的轴(axis)标签,轴由参数axis指定
    • index,columns:新索引,如果指定index参数,等价于指定labels和axis=0/'index',如果指定columns,等价于指定labels和axis=1/'columns'
    • axis:轴,axis=0/'index'表示行,axis=1/'columns'表示列
    • method:用于填充的方法,有效值是None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’,
      •   None表示不会填充
      •   ‘backfill’/’bfill’:表示回填,用NA的后面第一个有效值来填充当前的NA
      •   ‘pad’/’ffill’:表示补填,用前面第一个有效值来填充当前的NA
      •   ‘nearest’:用最接近NA的有效值来填充当前的NA
    • copy:默认值是True,返回新的对象
    • level:用于MultiIndex,在一个级别上,与MultiIndex进行匹配。
    • fill_value:标量值,默认值是np.NaN,用于对缺失值进行填充的值
    • limit:填充的最大次数
    • tolerance:可选参数,表示不能完全匹配的原始标签和新标签之间的最大距离,匹配位置处的索引值满足:abs(index_position -  target_position)<= tolerance,容差可以是标量值(对所有序列值应用相同的容差),也可以是list-like结构(对每个序列元素应用可变容差),list-like结构包括列表、元组、数组和序列,并且list-like结构的长度和序列的长度和长度必须相同。

    2、设置索引

    设置索引,可以使用set_index()函数把已有的列转换为行索引,也可以使用set_axis()函数替换掉已有的轴索引。使用现有的列作为DataFrame的索引:

    DataFrame.set_index(self, keys, drop=True, append=False, inplace=False, verify_integrity=False)

    参数注释:

    • keys:列标签,或列标签的列表,
    • drop:默认值是True,表示删除keys参数指定的列;设置为False,表示不删除keys参数指定的列。
    • append:默认值是False,表示删除原始行索引;如果设置为True,表示向现有的行索引中追加索引。
    • verify_integrity:默认值是False,不检查新索引是否存在重复值。

    3,替换轴的索引 

    把给定的轴的索引替换为新索引:

    DataFrame.set_axis(self, labels, axis=0, inplace=None)

    参数注释:

    • labels:新索引的值
    • axis:{0 or ‘index’, 1 or ‘columns’}, default 0,指定用于更新的轴
    • inplace:是否原地更新

    使用新的索引来替换原始的行索引:

    >>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
    >>> df.set_axis(['a', 'b', 'c'], axis='index', inplace=False)
       A  B
    a  1  4
    b  2  5
    c  3  6

    4,重置索引

     重置索引表示把DataFrame的索引设置为默认值,也就是从0开始到N-1的整数位置索引。设置索引是把列转换为索引,而重置索引可以认为是把索引转换为列,对于单级别的索引,常用的参数有:

    DataFrame.reset_index(self, drop=False, inplace=False,...)

    drop 参数表示是否删除原始索引,如果设置为False,那么索引转换为列;如果设置为True,表示把索引删除。

    举个例子,对于以下数据框,索引是行标签:

    >>> df = pd.DataFrame([('bird', 389.0),
    ...                    ('bird', 24.0),
    ...                    ('mammal', 80.5),
    ...                    ('mammal', np.nan)],
    ...                   index=['falcon', 'parrot', 'lion', 'monkey'],
    ...                   columns=('class', 'max_speed'))
    >>> df
             class  max_speed
    falcon    bird      389.0
    parrot    bird       24.0
    lion    mammal       80.5
    monkey  mammal        NaN

    对数据框重置索引,把原始索引的值转换为数据框的一列,并添加一个新的整数位置索引。

    >>> df.reset_index()
        index   class  max_speed
    0  falcon    bird      389.0
    1  parrot    bird       24.0
    2    lion  mammal       80.5
    3  monkey  mammal        NaN

    三,重命名轴

    对列名或行标签重命名,可以使用rename()和rename_axis()函数

    DataFrame.rename(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='ignore')
    DataFrame.rename_axis(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False)

    对于rename()函数, 参数 mapper 可以是dick-like 结构,也可以是函数,举个例子,把DataFrame对象的列名由Timestamp类型转换为字符串类型:

    df.rename(mapper =lambda x: pd.to_datetime(x).strftime('%Y%m%d') if x != 'na_count' else x, axis=1)

    四,合并数据

    DataFrame的合并(Merge)运算是通过一个或多个键把行连接起来,和关系型数据库的Join操作相同,但是DataFrame的合并只支持等值条件的合并:

    DataFrame.merge(self, right, how='inner', left_on=None, right_on=None, left_index=False, right_index=False, 
    sort=False, suffixes=('_x', '_y'), copy=True)

    参数注释:

    • right:合并的右表
    • how:指定连接的类型,有效值是inner、outer、left、right,用于指定内连接、full outer、左外、右外连接:
    • left_on,right_on:分别用于指定连接的列,当在对应的列上值相同时,两个表合并的条件成立。
    • left_index,right_index:指定索引作为连接条件
    • sort:根据连接键对合并后的数据进行排序
    • suffixes:用于为重名的列指定后缀,默认值是('_x','_y')
    • copy:把数据复制到结果中

    参考文档:

    pandas DataFrame

  • 相关阅读:
    词义辨析:事件与事故
    术语-BPM:BPM
    职位:DBA
    职业-软件:软件测试工程师
    职位-软件工程师:软件工程师
    职业-IT:全栈工程师
    术语-技术栈:技术栈
    .NET Core:目录
    .NET Core:.Net Core 百科
    术语-抽象:抽象
  • 原文地址:https://www.cnblogs.com/ljhdo/p/11592735.html
Copyright © 2011-2022 走看看