• Pandas的结构和应用


    Pandas处理以下三个数据结构 -

    • 系列(Series)----一维ndarray

              特点:带有标签,可以使用标签作为索引,大小不能改变,内部数据可以改变。

                属性:与NumPy类似,多了一个轴标签axis lables

    • 数据帧(DataFrame)---二维ndarray                  特点:带标签,可以同行列标签索引,尺度可变,数据可变
    • 面板(Panel)                                                    特点:面板是具有异构数据的三维数据结构。在图形表示中很难表示面板

    这些数据结构构建在Numpy数组之上,这意味着它们很快。

    考虑这些数据结构的最好方法是,较高维数据结构是其较低维数据结构的容器。 例如,DataFrameSeries的容器,PanelDataFrame的容器。

    1.对象的创建:数组  字典  标量值或常数

    import pandas as pd
    import numpy as np
    
    s = pd.Series([1,3,5,np.nan,6,8])
    
    print(s)

    输出:

    0    1.0
    1    3.0
    2    5.0
    3    NaN
    4    6.0
    5    8.0
    dtype: float64

    通过传递numpy数组,使用datetime索引和标记列来创建DataFrame

    dates = pd.date_range('20180701', periods=7)
    print(dates)
    
    print("--"*16)
    df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=list('ABCD'))
    print(df)

    输出:

    DatetimeIndex(['2018-07-01', '2018-07-02', '2018-07-03', '2018-07-04',
                   '2018-07-05', '2018-07-06', '2018-07-07'],
                  dtype='datetime64[ns]', freq='D')
    --------------------------------
                       A         B         C         D
    2018-07-01 -0.500163  0.032670 -1.026652 -0.444624
    2018-07-02  0.870395 -1.879662  0.476651  0.546444
    2018-07-03 -0.182999 -0.497964  0.840211  0.256168
    2018-07-04  1.130527 -0.664251 -0.226294  1.660457
    2018-07-05 -1.304568  0.204915  0.366062  1.905667
    2018-07-06  0.605275  0.356298 -0.561465 -0.000841
    2018-07-07  0.226876  0.998272  0.592386  0.306725

    2.查看数据

    x.head()可以查看顶部数据        x.tail()可以输入参数,查看指定个数的底部数据

    df1 = pd.DataFrame([22,24,54,65,76,88,98],  columns=list('A'))
    print(df1.head())
    print("--------------" * 10)
    print(df1.tail(3))

    输出:

      

        A
    0  22
    1  24
    2  54
    3  65
    4  76
    ------------------------------------------------------------------------------------
        A
    4  76
    5  88
    6  98

    3.x.describe()描述显示数据的快速统计摘要,参考以下示例代码

    dates = pd.date_range('20180701', periods=7)
    df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=list('ABCD'))
    print(df.describe())

    输出:

               A         B         C         D
    count  7.000000  7.000000  7.000000  7.000000
    mean  -0.051137 -0.290501 -0.308145 -0.287636
    std    0.720711  1.084754  0.946105  0.615045
    min   -0.766295 -1.789795 -1.962022 -1.262667
    25%   -0.658085 -1.213707 -0.778745 -0.468529
    50%   -0.286046  0.302139  0.020762 -0.379909
    75%    0.496656  0.476699  0.207962 -0.100779
    max    1.017243  0.928164  0.925811  0.767738

    4.排序

    (1)标签索引的排序----sort_index(axis=1,ascending=False)

      其中ascending默认为True,升序排序

    (2)元素单列排序:----sort_values(by=‘B’)

      默认会按所在列进行升序排序

    5.选择系列元素 , 通过【】使用

    值得注意的是:利用dataframe时,做切片用的标签边界可以取到,而作为下标的右边界是取不到的。

    (1)按标签选择:loc /at     按下标选择:iloc/iat

    print(df.loc[dates[0]])

    输出:

    A    1.320921
    B    0.522823
    C    0.340569
    D   -1.911398
    Name: 2017-01-01 00:00:00, dtype: float64

    (2)通过标签选择多轴,其中:处也可以写行标签

    print(df.loc[:,['B','D']])

    输出:

                       B         D
    2017-01-01  0.522823 -1.911398
    2017-01-02 -0.354351 -1.719314
    2017-01-03 -0.166968 -0.623292
    2017-01-04 -1.198105  0.824853
    2017-01-05 -0.829653  0.310548
    2017-01-06 -0.964786  0.051597

    (3)布尔索引

    也可以根据isin()的参数条件进行过滤,使用参考教程。

    print(df[df.A>0])

    输出:

                       A         B         C         D
    2017-01-01  1.320921  0.522823  0.340569 -1.911398
    2017-01-03  0.991224 -0.166968  0.840899 -0.623292
    2017-01-04  0.240294 -1.198105  0.021427  0.824853
    2017-01-06  0.683117 -0.964786 -0.159696  0.051597

    5.(1)列的选择  df['列名']

      (2)列的添加:df['列名']=df.Serices[数组]

      (3)列的删除:del  df['列名']

    6.(1)行的选择  df[]切片、loc标签索引

      (2)行的添加:df.append(df系列)

      (3)行的删除:df.drop(索引)

    7.迭代

    for col in df:
       print (col)

    输出:

    A
    B
    C
    D

    表示:如果只是迭代df对象,而非他的迭代器迭代,则只会输出dataframe的列名。

    (1)所以迭代列应该为:

    for key,value in df.iteritems():
       print (key,value)

    (2)迭代行为:

    for row_index,row in df.iterrows():
       print (row_index,row)

    (3)itertuples()方法将为DataFrame中的每一行返回一个产生一个命名元组的迭代器。元组的第一个元素将是行的相应索引值,而剩余的值是行值。

    注意 - 不要尝试在迭代时修改任何对象。迭代是用于读取,迭代器返回原始对象(视图)的副本,因此更改将不会反映在原始对象上。

    7.分组和聚合

    GroupBy()/ Agg()

    (1)任何分组(groupby)操作都涉及原始对象的以下操作之一。它们是 -

    • 分割对象
    • 应用一个函数
    • 结合的结果

    在许多情况下,我们将数据分成多个集合,并在每个子集上应用一些函数。在应用函数中,可以执行以下操作 -

    • 聚合 - 计算汇总统计
    • 转换 - 执行一些特定于组的操作
    • 过滤 - 在某些情况下丢弃数据
    df.groupby('列名').groups

    grouped = df.groupby('列名')
    
    for name,group in grouped:
        print (name)
        print (group)

      get_group()方法,可以选择一个组

    (2)聚合函数为每个组返回单个聚合值。当创建了分组(group by)对象,就可以对分组数据执行多个聚合操作。

    一个比较常用的是通过聚合或等效的agg方法聚合。

    grouped = df.groupby('列名1')
    print (grouped['列名2'].agg(np.mean))

    (3)转换

    分组或列上的转换返回索引大小与被分组的索引相同的对象。因此,转换应该返回与组块大小相同的结果。

    print (grouped.transform(score))

    (4)过滤

    过滤根据定义的标准过滤数据并返回数据的子集。filter()函数用于过滤数据。

    filter = df.groupby('Team').filter(lambda x: len(x) >= 3)
    
    print (filter)

    8.可视化

    df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('2018/12/18',
       periods=10), columns=list('ABCD'))
    
    df.plot()
    • barbarh为条形
    • hist为直方图
    • boxplot为盒型图
    • area为“面积”
    • scatter为散点图
    import pandas as pd
    from matplotlib import pyplot as plt
    import numpy as np
    import random
    df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('2018/12/18',
       periods=10), columns=list('ABCD'))
    df.plot()
    plt.show()

    输出:

    df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
    df.plot.bar()
    plt.show()

    输出:

    其余图形类似上面的方法,各种图形请参考Matplotlib官网,详细介绍会在下一篇博客,请关注留言。

  • 相关阅读:
    pat 1123 Is It a Complete AVL Tree
    pat 1098 Insertion or Heap Sort
    pat 1147 Heaps
    Python中的Dict底层 | 字典类型删除数据为什么不直接删除?
    MySQL | 重置root密码
    MySQL | 安装后初次使用
    安装MySQL | 报缺失文件的错误
    IDEA | 不使用骨架创建Maven项目
    python | list.sort()和sorted(list)的区别
    python | 字符串不可修改
  • 原文地址:https://www.cnblogs.com/qianshuixianyu/p/9255556.html
Copyright © 2020-2023  润新知