Pandas中的数据形式

原文地址

  • What is Pandas

    如果用 python 的列表和字典来作比较, 那么可以说 Numpy 是列表形式的,没有数值标签,而 Pandas 就是字典形式。Pandas是基于Numpy构建的,让Numpy为中心的应用变得更加简单。

    引自 Pandas 基本介绍

    计算机编程中pandas是为Python编程语言编写的用于数据处理和分析的软件库。特别是,它提供了用于处理数字表和时间序列的数据结构和操作。它是三项BSD许可下发布的免费软件。[2]该名称源自术语“ 面板数据 ”,这是数据集的计量经济学术语,其中包括同一个人在多个时间段内的观察结果。[3]

    引自 维基百科_pandas (software)

  • 导入支持包

    import pandas as pd
    import numpy as np
    
    # 设置了seed之后每次生成的随机数据将都是一样的
    np.random.seed(0)   # 可随便传入一个int值
    
  • pandas.Series()

    Pandas将一维数据封装成一个pandas.Series()对象

    通过代码来说明Series类的用法

    # 可以理解为一串带索引的数据
    index = np.arange(100,106)
    s = pd.Series([1, 3, 6, np.nan, 44, 1], index=index)
    # np.nan差不多就是None
    print(s)
    """
    100     1.0
    101     3.0
    102     6.0
    103     NaN
    104    44.0
    105     1.0
    dtype: float64
    """
    # 如不指定index,会默认生成从0开始的整数索引
    
  • pandas.DataFrame()

    Pandas将二维数据封装成了pandas.DataFrame()对象

    • DataFrame的一种生成方式——通过传入字典
    dfdata = pd.DataFrame({
        'key': ['K0', 'K1', 'K2', 'K3'],    # 每个元素是一列,key即列属性名;value是列属性值
        'A': ['A0', 'A1', 'A2', 'A3'],
        'B': ['B0', 'B1', 'B2', 'B3']
    })
    #   key   A   B
    # 0  K0  A0  B0
    # 1  K1  A1  B1
    # 2  K2  A2  B2
    # 3  K3  A3  B3
    
    • DataFrame的另一种生成方式——传入一个矩阵,以及DataFrame类型数据的处理方式
    dates = pd.date_range('20200214', periods=6)
    df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])
    # index为行索引
    # columns为列索引
    # 如不指定会生成从0开始整数索引
    # print(df)
    """
                       a         b         c         d
    2020-02-14 -1.252337  0.292209 -0.574282 -1.169555
    2020-02-15 -0.690798 -0.336620 -1.114641  0.109090
    2020-02-16 -1.050227 -0.934658  1.049743  0.118560
    2020-02-17  0.507933 -1.418839  0.479424 -0.935449
    2020-02-18  0.468655  0.163571  1.051186 -0.838357
    2020-02-19 -0.069228  0.180696 -0.849428 -0.978065
    """
    # 获得列,每列是一个Series
    # print(type(df['a']))  # print一列的type
    # print(df['a'])        # print一列的数据
    '''
    <class 'pandas.core.series.Series'>
    2020-02-14   -0.919781
    2020-02-15    0.114945
    2020-02-16    1.928675
    2020-02-17   -1.004000
    2020-02-18    1.099467
    2020-02-19    1.029294
    Freq: D, Name: a, dtype: float64
    '''
    # print(type(df[:'2020-02-14']))    # print一行的type
    # print(df[:'2020-02-14'])          # print一行的数据
    '''
    <class 'pandas.core.frame.DataFrame'>
                       a         b         c         d
    2020-02-14  0.129921  0.330787  1.224564  1.931845
    '''
    
    # print行索引
    print(df.index)
    # DatetimeIndex(['2020-02-14', '2020-02-15', '2020-02-16', '2020-02-17',
    #                '2020-02-18', '2020-02-19'],
    #               dtype='datetime64[ns]', freq='D')
    
    # print列索引
    print(df.columns)
    # Index(['a', 'b', 'c', 'd'], dtype='object')
    
    # 通过.values可以把pd.DataFrame()格式的数据转成np.array
    print(type(df.values))
    print(df.values)
    # <class 'numpy.ndarray'>
    # [[ 0.92548393  0.18265364  0.5358075  -0.84910901]
    #  [ 1.62660144 -0.33015259 -0.75008368  0.94722092]
    #  [-0.83908171  1.11952036  0.08644712 -0.96739122]
    #  [ 1.19504034 -0.49438307 -0.31389145  0.45401724]
    #  [ 0.33769456  0.11381624 -0.86673364  1.73489697]
    #  [-0.33031513  0.09167725 -0.17211572  0.44306859]]
    
    # 对pd.DataFrame()中的数据进行统计
    print(df.describe())
    #               a         b         c         d
    # count  6.000000  6.000000  6.000000  6.000000
    # mean   0.332788  0.106238  0.400794  0.011054
    # std    1.238534  1.822945  1.426681  0.338564
    # min   -1.551920 -2.283634 -1.469739 -0.476852
    # 25%   -0.387510 -1.444339 -0.720901 -0.128311
    # 50%    0.685510  0.796483  0.714214 -0.025572
    # 75%    1.005481  1.579427  1.388588  0.175207
    # max    1.810674  1.678970  2.031968  0.514741
    
    # 对pd.DataFrame()中的数据进行翻转/转置
    print(df.T)
    #    2020-02-14  2020-02-15  2020-02-16  2020-02-17  2020-02-18  2020-02-19
    # a    0.037116   -0.429569    0.215592    0.043167    0.817896    0.924043
    # b    0.136156    0.209794   -1.753687   -0.725070    1.502126    0.576307
    # c    1.251914   -1.965787   -0.052305    1.051349    0.982595    0.939506
    # d    0.626040   -0.367166    0.054540    1.529206   -1.221776   -1.038283
    
    # 按行/列的索引排序
    # (就是按索引的名称排序,不是按值排序,字符串按字母顺序,数字按大小)
    print(df.sort_index(axis=1, ascending=False))
    # axis=0:按第一个维度(行)索引排序; axis=1:按第二个维度(列)索引排序
    # ascending:    bool值,是否按升序排列,True为升序,False为倒序
    #                    d         c         b         a
    # 2020-02-14  2.240893  0.978738  0.400157  1.764052
    # 2020-02-15 -0.151357  0.950088 -0.977278  1.867558
    # 2020-02-16  1.454274  0.144044  0.410599 -0.103219
    # 2020-02-17  0.333674  0.443863  0.121675  0.761038
    # 2020-02-18 -0.854096  0.313068 -0.205158  1.494079
    # 2020-02-19 -0.742165  0.864436  0.653619 -2.552990
    
    # 按某行某列的值进行排序
    print(df.sort_values(by='2020-02-15', axis=1, ascending=False))
    # by    传值为行或列的索引名称,注意应该和axis对应
    # axis  传值为数据的维度,=0时by应该传列的索引,对行进行排序;=1时传行的索引,对列进行排序
    # ascending bool值,是否进行升序,False表示倒序排列
    
  • 参考文献

    程序主要来自 Pandas 基本介绍,略有改动

发布了119 篇原创文章 · 获赞 86 · 访问量 5842

猜你喜欢

转载自blog.csdn.net/BBJG_001/article/details/104454953
今日推荐