精华内容
下载资源
问答
  • 在机器学习实验中和 for 循环中,经常需要重复对同一个dataframe 对象中增加行。观察下述示例:` import numpy as np import pandas as pd uu=np.random.randn(2,4) uu = pd.DataFrame(uu,columns=('A','B','C','D')...
  • Pandas:DataFrame对象的基础操作

    万次阅读 多人点赞 2017-07-18 22:36:17
    DataFrame对象的创建,修改,合并import pandas as pd import numpy as np创建DataFrame对象# 创建DataFrame对象 df = pd.DataFrame([1, 2, 3, 4, 5], columns=['cols'], index=['a','b','c','d','e']) df ....

    DataFrame对象的创建,修改,合并

    
    import pandas as pd
    import numpy as np
    

    创建DataFrame对象

    # 创建DataFrame对象
    df = pd.DataFrame([1, 2, 3, 4, 5], columns=['cols'], index=['a','b','c','d','e'])
    print df
    
       cols
    a     1
    b     2
    c     3
    d     4
    e     5
    
    df2 = pd.DataFrame([[1, 2, 3],[4, 5, 6]], columns=['col1','col2','col3'], index=['a','b'])
    print df2
    
       col1  col2  col3
    a     1     2     3
    b     4     5     6
    
    df3 = pd.DataFrame(np.array([[1,2],[3,4]]), columns=['col1','col2'], index=['a','b'])
    print df3
    
       col1  col2
    a     1     2
    b     3     4
    
    df4 = pd.DataFrame({'col1':[1,3],'col2':[2,4]},index=['a','b'])
    print df4
    
       col1  col2
    a     1     2
    b     3     4
    
    创建DataFrame对象的数据可以为列表,数组和字典,列名和索引为列表对象
    

    基本操作

    # DataFrame对象的基本操作
    df2.index
    
    Index([u'a', u'b'], dtype='object')
    
    df2.columns
    
    Index([u'col1', u'col2', u'col3'], dtype='object')
    
    # 根据索引查看数据
    df2.loc['a']   
    # 索引为a这一行的数据
    # df2.iloc[0] 跟上面的操作等价,一个是根据索引名,一个是根据数字索引访问数据
    
    col1    1
    col2    2
    col3    3
    Name: a, dtype: int64
    
    print df2.loc[['a','b']]    # 访问多行数据,索引参数为一个列表对象
    
       col1  col2  col3
    a     1     2     3
    b     4     5     6
    
    print df.loc[df.index[1:3]]
    
       cols
    b     2
    c     3
    
    # 访问列数据
    print df2[['col1','col3']]
    
       col1  col3
    a     1     3
    b     4     6
    

    计算

    # DataFrame元素求和
    # 默认是对每列元素求和
    print df2.sum()
    
    col1    5
    col2    7
    col3    9
    dtype: int64
    
    # 行求和
    print df2.sum(1)
    
    a     6
    b    15
    dtype: int64
    
    # 对每个元素乘以2
    print df2.apply(lambda x:x*2)
    
       col1  col2  col3
    a     2     4     6
    b     8    10    12
    
    # 对每个元素求平方(支持ndarray一样的向量化操作)
    print df2**2
    
       col1  col2  col3
    a     1     4     9
    b    16    25    36
    

    列扩充

    # 对DataFrame对象进行列扩充
    df2['col4'] = ['cnn','rnn']
    print df2
    
       col1  col2  col3 col4
    a     1     2     3  cnn
    b     4     5     6  rnn
    
    # 也可以通过一个新的DataFrame对象来定义一个新列,索引自动对应
    df2['col5'] = pd.DataFrame(['MachineLearning','DeepLearning'],index=['a','b'])
    print df2
    
       col1  col2  col3 col4             col5
    a     1     2     3  cnn  MachineLearning
    b     4     5     6  rnn     DeepLearning
    

    行扩充

    # 行进行扩充
    print df2.append(pd.DataFrame({'col1':7,'col2':8,'col3':9,'col4':'rcnn','col5':'ReinforcementLearning'},index=['c']))
    
       col1  col2  col3  col4                   col5
    a     1     2     3   cnn        MachineLearning
    b     4     5     6   rnn           DeepLearning
    c     7     8     9  rcnn  ReinforcementLearning
    

    注意!

    # 如果在进行 行扩充时候没有,指定index的参数,索引会被数字取代
    print df2.append({'col1':10,'col2':11,'col3':12,'col4':'frnn','col5':'DRL'},ignore_index=True)
    
       col1  col2  col3  col4             col5
    0     1     2     3   cnn  MachineLearning
    1     4     5     6   rnn     DeepLearning
    2    10    11    12  frnn              DRL
    
    # 以上的行扩充,并没有真正修改,df2这个DataFrame对象,除非
    df2 = df2.append(pd.DataFrame({'col1':7,'col2':8,'col3':9,'col4':'rcnn','col5':'ReinforcementLearning'},index=['c']))
    print df2
    
       col1  col2  col3  col4                   col5
    a     1     2     3   cnn        MachineLearning
    b     4     5     6   rnn           DeepLearning
    c     7     8     9  rcnn  ReinforcementLearning
    c     7     8     9  rcnn  ReinforcementLearning
    
    print df2.loc['c']
    
       col1  col2  col3  col4                   col5
    c     7     8     9  rcnn  ReinforcementLearning
    c     7     8     9  rcnn  ReinforcementLearning
    

    DataFrame对象的合并

    # DataFrame 对象的合并
    df_a = pd.DataFrame(['wang','jing','hui','is','a','master'],columns=['col6'],index=['a','b','c','d','e','f'])
    print df_a
    
         col6
    a    wang
    b    jing
    c     hui
    d      is
    e       a
    f  master
    
    # 默认合并,只保留dfb中的全部索引
    dfb = pd.DataFrame([1,2,4,5,6,7],columns=['col1'],index=['a','b','c','d','f','g'])
    print dfb.join(df_a)
    
       col1    col6
    a     1    wang
    b     2    jing
    c     4     hui
    d     5      is
    f     6  master
    g     7     NaN
    
    # 默认合并之接受索引已经存在的值
    # 通过指定参数 how,指定合并的方式
    print dfb.join(df_a,how='inner')   # 合并两个DataFrame对象的交集
    
       col1    col6
    a     1    wang
    b     2    jing
    c     4     hui
    d     5      is
    f     6  master
    
    # 合并两个DataFrame对象的并集
    print dfb.join(df_a,how='outer')
    
       col1    col6
    a   1.0    wang
    b   2.0    jing
    c   4.0     hui
    d   5.0      is
    e   NaN       a
    f   6.0  master
    g   7.0     NaN
    

    安利一下,公众号:唐牛才是食神

    在这里插入图片描述

    展开全文
  • DataFrame 对象合并

    千次阅读 2018-02-27 00:07:44
    Pandas中 DataFrame 对象数据纵向、横向合并。 Pandas 中 concat 函数参数理解与简单应用。 异常的简单处理。 目的 再利用Python开发过程中,常用到 DataFrame 对象的横、纵向合并,所以作此总结。 1....

    主要内容

    • Pandas中 DataFrame 对象数据纵向、横向合并。
    • Pandas 中 concat 函数参数理解与简单应用。
    • 异常的简单处理。

    目的

    • 再利用Python开发过程中,常用到 DataFrame 对象的横、纵向合并,所以作此总结。

    1. 纵向合并DataFrame

    • DataFrame 对象所有列列名一致
    df = pd.DataFrame([['bird', 'polly'], ['monkey', 'george']],columns=['animal', 'name'])
    df2 = pd.DataFrame([['pig', 'xixi'], ['giraffe', 'feifei']],columns=['animal', 'name'])
    
    pd.concat([df,df2], axis=0) # 纵向合并
    • 效果图
      zongxaing

    2. 横向合并DataFrame

    df3=pd.DataFrame([['a', 1], ['b', 2]],columns=['letter', 'number'])
    df4 = pd.DataFrame([['bird', 'polly'], ['monkey', 'george']],columns=['animal', 'name'])
    
    pd.concat([df3,df4], axis=1) # 横向合并
    • 效果图
      hengxiang

    3. 集成验证(verify_integrity)

    • verify_integrity=true, 合并后的 index 值不能重复;否则抛出异常
    df5 = pd.DataFrame([1], index=['a'])
    df6 = pd.DataFrame([2], index=['a'])
    
    try:
        print (pd.concat([df5, df6], verify_integrity=False))
    except ValueError:
        print ("ValueError: Indexes have overlapping values: ['a']")
    
    # 另一种写法
    # except ValueError as args:
    #     print (args)
    • 效果图
      xiaoguo

    concat 其他参数

    Signature : 
        pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)
    
    Docstring:
        Concatenate pandas objects along a particular axis with optional set logic
    along the other axes.
    
    objs             : A sequence or mapping of Series, DataFrame, or Panel objects
    axis             : {0/'index', 1/'columns'}, default 0
    join             : {'inner', 'outer'}, default 'outer'
    join_axes        : list of Index objects
    ignore_index     : boolean, default False
    keys             : sequence, default None
    levels           : list of sequences, default None
    names            : list, default None
    verify_integrity : boolean, default False
    copy             : boolean, default True
    • 具体事例
    # coding: utf-8
    import pandas as pd
    
    # ## pd.concat 参数测试
    s1 = pd.DataFrame(['a', 'b'], columns=['alpha'])
    s2 = pd.DataFrame(['c', 'd'], columns=['alpha'])
    
    
    # ### objs 参数
    pd.concat([s1, s2], )
    
    
    # ### objs、ignore_index 参数
    # - 重置索引
    pd.concat([s1, s2], ignore_index=True)
    
    
    # ### objs、keys 参数
    pd.concat([s1, s2], keys=['s1', 's2',])
    
    
    # ### objs、keys、names 参数
    pd.concat([s1, s2], keys=['s1', 's2'],names=['Series name', 'Row ID'])
    
    
    # ### objs、columns 参数
    df1=pd.DataFrame([['a', 1], ['b', 2]],columns=['letter', 'number'])
    df1
    
    
    df3 = pd.DataFrame([['c', 3, 'cat'], ['d', 4, 'dog']],columns=['letter', 'number', 'animal'])
    df3
    
    
    # ### objs、join 参数
    # - 以内交( inner )方式合并 DataFrame
    pd.concat([df1, df3], join="inner")
    
    
    # ### objs、join 参数
    # - 以外交( outer )方式合并 DataFrame
    pd.concat([df1, df3], join="outer")
    
    
    df4 = pd.DataFrame([['bird', 'polly'], ['monkey', 'george']],columns=['animal', 'name'])
    df4
    
    
    # ### objs、axis 参数,横向合并 DataFrame
    # - 纵向合并 数据列需一致
    pd.concat([df1, df4], axis=1)
    • 效果图
      2018

    参考

    展开全文
  • 在Python中DataFrame对象如何按照索引排序?DataFrame对象如何按照某列的值排序? 现在有一个dataframe变量df1,使用df1.sort_index()进行排序;使用df1.sort_values()按照某一列的值进行排序。 下面使用例子来...

    在Python中DataFrame对象如何按照索引排序?DataFrame对象如何按照某列的值排序?

    现在有一个dataframe变量df1,使用df1.sort_index()进行排序;使用df1.sort_values()按照某一列的值进行排序。

    下面使用例子来说明一下:

    1.创建一个dataframe对象。

    df1=pd.DataFrame(np.arange(16).reshape(4,4),
                     index = pd.date_range('20200101', periods = 4),  
                     columns=list('ABCD'))

    df1的样子是这样的:

    2.按照索引排序:

    df1.sort_index(ascending=False)

    其中ascending=False指定是采用逆序排列

    3.按照某一列的值进行排序:

    df1.sort_values(by='A',ascending=False)

    by='A'说明是按照‘A’列的值进行排序,ascending=False是按照逆序进行排序。

     

     

    展开全文
  • 5.3 DataFrame对象

    2017-06-29 22:08:30
    DataFrame对象是Pandas最常用的数据对象。一个DataFrame是一个二维的表结构,它可以存储多种不同的数据类型,并且每一个坐标轴都有自己的标签。简单的说,DataFrame就是在pandas中组织数据的表格。 5.3.2 创建...

    5.3.1 DataFrame介绍

    DataFrame对象是Pandas最常用的数据对象。一个DataFrame是一个二维的表结构,它可以存储多种不同的数据类型,并且每一个坐标轴都有自己的标签。简单的说,DataFrame就是在pandas中组织数据的表格。

    5.3.2 创建DataFrame对象

    下面创建一个DataFrame对象,示例代码:

    import numpy as np
    import pandas as pd
    df = pd.DataFrame(np.random.randn(6,4), index = np.arange(0,6), columns = list("ABCD"))
    print(df)

    运行结果

              A         B         C         D
    0 -0.846645  1.520671 -0.381286 -1.120017
    1  0.448834  0.287758  0.207721 -0.459574
    2  0.140812 -1.151756 -0.629771  0.501368
    3 -1.757895 -0.311795 -0.023981 -0.433921
    4 -2.666680  0.162864  1.905826  0.312644
    5  0.841167 -1.883985  0.473520 -0.061960

    我们创建一个6*4的数据,numpy.random的randn函数用于创建服从正态分布的随机数;index参数表示行标索引,即数据行记录从0到5;colunms参数表示列标索引,即数据列属性从A到B。
    此外,我们也可以用字典创建DataFrame对象,例如创建一个列名分别为A和B的数据框,索引是自动创建的整数,示例代码:

    df2 = pd.DataFrame( { 'A' : np.random.randn(6), 'B' : np.random.randn(6),} )
    print(df2)

    运行结果

              A         B
    0  0.086054  0.033148
    1 -0.350087 -1.116980
    2  1.448491 -0.216606
    3  0.023093 -0.750871
    4 -0.391246  1.312327
    5  0.767756 -0.803959

    假如字典内的数据长度不同,以最长的数据为准,比如A列有1行,B列有4行,示例代码:

    df3 = pd.DataFrame( { 'A' : pd.Timestamp("20170415"), 'B' : pd.Series(1, index=list(range(4))), } )
    print(df3)

    运行结果

               A  B
    0 2017-04-15  1
    1 2017-04-15  1
    2 2017-04-15  1
    3 2017-04-15  1

    5.3.3 DataFrame对象的属性

    DataFrame对象创建之后,具备了描述其数据及结构特征的相关属性,主要有index,columns,values,dtypes和shape等。
    info主要用来对DataFrame对象基本信息的描述,index和columns分别表示行索引和列名,示例代码:

    print(df.index)
    print("\n")
    print(df.columns)

    运行结果:

    Int64Index([0, 1, 2, 3, 4, 5], dtype='int64')
    
    
    Index(['A', 'B', 'C', 'D'], dtype='object')

    values属性用来查看数据值,示例代码:

    print(df.values)

    运行结果:

    [[-0.84664486  1.52067103 -0.38128625 -1.12001714]
     [ 0.44883372  0.28775841  0.20772062 -0.45957372]
     [ 0.1408116  -1.15175558 -0.62977112  0.50136828]
     [-1.75789514 -0.3117948  -0.02398082 -0.43392136]
     [-2.66668042  0.16286389  1.90582602  0.31264409]
     [ 0.8411672  -1.88398537  0.47351964 -0.06196017]]

    dtypes属性用来获取每行变量的数据类型,shape属性与NumPy的ndarray数组类似,可以得到DataFrame的行数和列数。示例代码:

    print(df.dtypes)
    print("\n")
    print(df.shape)

    运行结果:

    A    float64
    B    float64
    C    float64
    D    float64
    dtype: object
    
    
    (6, 4)

    5.3.4 DataFrame对象的方法

    我们可以通过DataFrame具备的方法观察数据值的相关信息,主要方法有info()、count()、head()、tail()、sort()、decribe()等。
    info()方法是对DataFrame对象一个基本信息的描述,而count()方法是返回每一列变量中所有非缺失数据的个数,示例代码:

    print(df.info())
    print("\n")
    print(df.count())

    运行结果:

    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 6 entries, 0 to 5
    Data columns (total 4 columns):
    A    6 non-null float64
    B    6 non-null float64
    C    6 non-null float64
    D    6 non-null float64
    dtypes: float64(4)
    memory usage: 240.0 bytes
    None
    
    
    A    6
    B    6
    C    6
    D    6
    dtype: int64
    head()方法用来查看前几行数据(默认是前5行),不过也可以通过括号内的参数指定前几行,示例代码:
    ```python
    print(df.head())

    运行结果:

              A         B         C         D
    0 -0.846645  1.520671 -0.381286 -1.120017
    1  0.448834  0.287758  0.207721 -0.459574
    2  0.140812 -1.151756 -0.629771  0.501368
    3 -1.757895 -0.311795 -0.023981 -0.433921
    4 -2.666680  0.162864  1.905826  0.312644

    指定显示前3行数据,示例代码:

    print(df.head(3))

    运行结果:

              A         B         C         D
    0 -0.846645  1.520671 -0.381286 -1.120017
    1  0.448834  0.287758  0.207721 -0.459574
    2  0.140812 -1.151756 -0.629771  0.501368

    使用tail()方法则用来查看最后几行数据(默认也是5行),示例代码:

    print(df.tail())

    运行结果:

              A         B         C         D
    1  0.448834  0.287758  0.207721 -0.459574
    2  0.140812 -1.151756 -0.629771  0.501368
    3 -1.757895 -0.311795 -0.023981 -0.433921
    4 -2.666680  0.162864  1.905826  0.312644
    5  0.841167 -1.883985  0.473520 -0.061960

    describe()方法用于获取数据集的常用统计量信息,包括计数、平均数、标准差、最大值、最小值及4分位差。需要注意的是,该方法仅会返回数值型变量的信息,示例代码:

    print(df.describe())

    运行结果:

                  A         B         C         D
    count  6.000000  6.000000  6.000000  6.000000
    mean  -0.640068 -0.229374  0.258671 -0.210243
    std    1.370322  1.189895  0.898960  0.590199
    min   -2.666680 -1.883985 -0.629771 -1.120017
    25%   -1.530083 -0.941765 -0.291960 -0.453161
    50%   -0.352917 -0.074465  0.091870 -0.247941
    75%    0.371828  0.256535  0.407070  0.218993
    max    0.841167  1.520671  1.905826  0.501368

    我们也可以通过sort()方法对数据进行排序,其中sort()括号内参数可以指定根据哪一列数据进行排序,默认是首列,以从小到大顺序方式排列。示例代码:

    print(df.sort(columns='C'))

    运行结果:

              A         B         C         D
    2  0.140812 -1.151756 -0.629771  0.501368
    0 -0.846645  1.520671 -0.381286 -1.120017
    3 -1.757895 -0.311795 -0.023981 -0.433921
    1  0.448834  0.287758  0.207721 -0.459574
    5  0.841167 -1.883985  0.473520 -0.061960
    4 -2.666680  0.162864  1.905826  0.312644

    此外,DataFrame与ndarray类似,也提供了大T方法,即对表格数据进行转置操作,示例代码:

    print(df.T)

    运行结果:

              0         1         2         3         4         5
    A -0.846645  0.448834  0.140812 -1.757895 -2.666680  0.841167
    B  1.520671  0.287758 -1.151756 -0.311795  0.162864 -1.883985
    C -0.381286  0.207721 -0.629771 -0.023981  1.905826  0.473520
    D -1.120017 -0.459574  0.501368 -0.433921  0.312644 -0.061960
    展开全文
  • DataFrame对象的创建,修改,合并 import pandas as pd import numpy as np 创建DataFrame对象 # 创建DataFrame对象 df = pd.DataFrame([1, 2, 3, 4, 5], columns=['cols'], index=['a','b','c','d','e']) print ...
  • 如下所示: df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a'...以上这篇从DataFrame中提取出Series或DataFrame对象的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。
  • dataframe对象与Series对象转化

    千次阅读 2020-04-07 23:35:16
    dataframe对象获取切片的常用方法有两种,一种是通过索引名和列名,即使用.loc ,另外一种是使用行号和列号,即使用.iloc 。 例如下述dataframe; import pandas as pd import numpy as np data=np.around(np.random....
  • pandas库是基于numpy构建的,所以其中的数据类型具有许多的相似之处,这里我们研究ndarray和DataFrame这两种数据结构在索引方面的方法,并做一些基本的对比,...先抛出结论:对于DataFrame对象,其只有直接的df[][...
  • groupby的操作可以被分为3部分: 第一步,存储于series或DataFrame中的数据,根据不同的keys会被split(分割)...使用例子来看一下,创建一个dataframe对象: df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
  • Python数据处理的小技巧(一)从Bunch对象到DataFrame对象的转换 从Bunch对象到DataFrame对象的转换 这里提供了一个通用函数: def sklearn_to_df(sklearn_dataset): df = pd.DataFrame(sklearn_dataset.data, ...
  • Python DataFrame对象plot函数的原始文本数据

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,254
精华内容 15,701
关键字:

对于dataframe对象