zoukankan      html  css  js  c++  java
  • Python——DataFrame基础操作

    DataFrame理解

    DataFrame可以看做是有序排列的若干Series对象,这里的“排列”是指这些Series都有共同的索引。

    一、读取文件

    dt = pd.read_csv(path)
    dt = pd.read_excel(path)
    dt = pd.read_table(path, sep=',')

    二、索引

    第一类索引是iloc属性,表示取值和切片都是显式的,dt.iloc[1:3] #注:从0开始的左闭右开区间

    第二类索引是loc属性,表示索引是隐式的,如dt.loc[:'Illinois', :'pop']

    第三种索引ix可实现一种混合效果,如dt.ix[:3, :'pop']

    三、合并与连接

    1、pd.concat()

    pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
                    keys=None, levels=None)

    其中,axis=0是按照行合并,axis=1是按列合并(也可写成axis='col')。axis=1时是按照索引合并的。

    ser1 = pd.Series(['A','B','C'])
    ser2 = pd.Series(['D','E','F'])
    ser3 = pd.Series(['G','H','I'])
    
    a = pd.concat([ser1,ser2])

    a的结果如下,如果直接按列合并ser3,就会报错。

    0    A
    1    B
    2    C
    0    D
    1    E
    2    F
    dtype: object

    pd.concat([a, ser3], axis=1)

    InvalidIndexError: Reindexing only valid with uniquely valued Index objects

    因为此时a的索引是保留原本的两个Series的Index的,可通过设置ignore_index=True,重置索引,

    2、 pd.append()

    ser1.append(ser2)

    Pandas的append()不直接更新原有对象的值,而是为合并后的数据创建一个新对象。

    3、pd.merge()

    pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False,
         sort=False, suffixes=('_x', '_y'), copy=True, indicator=False)

    详见help(pd.merge)

    四、分组(Gruopby)

    分组统计时需要使用到groupby方法,其原理是通过分割(split)、应用(apply)和组合(combine)得到结果。

    Groupby是对数据按照指定列进行分割,返回一个DataFrameGroupBy对象。DataFrameGroupBy对象里面隐藏着若干组数据,但是没有应用累计函数之前不会计算。

    import numpy as np
    rng = np.random.RandomState(0)
    df = pd.DataFrame({'key':['A','B','C','A','B','C'],
                      'data1':range(6),
                      'data2':rng.randint(0,10,6)},
                     columns=['key','data1','data2'])

    print(df)
    df.groupby('key')
     
      key  data1  data2
    0   A      0      5
    1   B      1      0
    2   C      2      3
    3   A      3      3
    4   B      4      7
    5   C      5      9
    
    Out[15]:
    <pandas.core.groupby.DataFrameGroupBy object at 0x000001D9BC42A860>

    (1)聚合aggregate

    应用函数后会对DataFrameGroupBy对象展开计算。

    df.groupby('key').aggregate(['min',np.median,max])
    data1data2
     minmedianmaxminmedianmax
    key      
    A 0 1.5 3 3 4.0 5
    B 1 2.5 4 0 3.5 7
    C 2 3.5 5 3 6.0 9

     还可以通过字典指定不同列需要的函数

    df.groupby('key').aggregate({'data1':'min',
                                'data2':'max'})
    data1data2
    key  
    A 0 5
    B 1 7
    C 2 9

     (2)过滤filter

    def filter_func(x):
        return x['data2'].std() > 4
    
    print(df.groupby('key').std())
    print(df.groupby('key').filter(filter_func))
     data1data2
    key  
    A 2.12132 1.414214
    B 2.12132 4.949747
    C 2.12132 4.242641
     keydata1data2
    1 B 1 0
    2 C 2 3
    4 B 4 7
    5 C 5 9

    (3)转换transform

    df.groupby('key').transform(lambda x:x-x.mean())
    data1data2
    0 -1.5 1.0
    1 -1.5 -3.5
    2 -1.5 -3.0
    3 1.5 -1.0
    4 1.5 3.5
    5 1.5 3.0

    五、数据透视表

    详见help(pd.pivot_table)

    titanic.pivot_table('survived', index='sex', columns='class', aggfunc={'survived':sum, 'fare':'mean'})

    六、其他操作(排序、去重、计算及按行列应用函数等)

    1、排序

    按照索引排序

    df.sort_index(ascending=False)
     keydata1data2
    5 C 5 9
    4 B 4 7
    3 A 3 3
    2 C 2 3
    1 B 1 0
    0 A 0 5

     按照值排序

    df.sort_values(by=['key','data2'])
    keydata1data2
    3 A 3 3
    0 A 0 5
    1 B 1 0
    4 B 4 7
    2 C 2 3
    5 C 5 9

    2、去重

    df.drop_duplicates('data2', keep='first')
    keydata1data2
    0 A 0 5
    1 B 1 0
    2 C 2 3
    4 B 4 7
    5 C 5 9

    想要知道某一列有多少个不重复的元素可以用df['data1'].nunique()

    3、删除Drop

    按照行删除

    先选出需要删除的行的index,再删除指定index

    df.drop(df.loc[df['key']=='A'].index, axis=0)
    keydata1data2
    1 B 1 0
    2 C 2 3
    4 B 4 7
    5 C 5 9

    按照列删除

    df.drop(['key','data2'], axis=1) 

    参考:《Python数据科学手册》

  • 相关阅读:
    浅谈移动端设备标识码:DeviceID、IMEI、IDFA、UDID和UUID
    Linux下的crontab定时执行任务命令详解
    SHOW INDEX查询MySQL表索引
    Vue非父子组件传值方式。
    windows 双网卡 内外网上网配置说明
    战神引擎部署备注说明
    k8s service直接暴露外部访问配置
    Kubernetes 五种资源控制器详细介绍以及功能演示(转)
    docker网络
    在Linux服务器,一键搭建K8s服务【脚本篇】(转)
  • 原文地址:https://www.cnblogs.com/tonorth123/p/11462691.html
Copyright © 2011-2022 走看看