zoukankan      html  css  js  c++  java
  • python数据处理工具 -- pandas(序列与数据框的构造)

       Pandas模块的核心操作对象就是对序列(Series)和数据框(Dataframe)。序列可以理解为数据集中的一个字段,数据框是值包含至少两个字段(或序列)

    的数据集。

    构造序列

    1.通过同质的列表或元组构建

    2.通过字典构建

    3.通过numpy中的一维数组构建

    4.通过数据框Dataframe中的某一列构建

    例如:

    import pandas as pd
    import numpy as np
    gdp1 = pd.Series([2.8,3.01,8.99,8.59,5.18])
    gdp2 = pd.Series({'北京':2.8,'上海':3.01,'广东':8.99,'江苏':8.59,'浙江':5.18})
    gdp3 = pd.Series(np.array((2.8,3.01,8.99,8.59,5.18)))
    print(gdp1)
    print(gdp2)
    print(gdp3)

    out:

    0    2.80
    1    3.01
    2    8.99
    3    8.59
    4    5.18
    dtype: float64
    北京    2.80
    上海    3.01
    广东    8.99
    江苏    8.59
    浙江    5.18
    dtype: float64
    0    2.80
    1    3.01
    2    8.99
    3    8.59
    4    5.18
    dtype: float64

    如上所示:不管是列表,元组,还是一维数组,构造的序列结果样式会产生两列,第一列属于序列的索引列(也可以理解为行号)

    ,自动从0开始,第二列才是序列的实际值。通过字典构造的序列就是第二个打印样式,仍然包含两列,所不同的是第一列不再是行号,而是具体的行名称(label),对应到字典中的键,第二列是序列的实际值,对应到字典的值;

    序列与一维数组有极高的相似性,获取一维数组元素的所有索引方法都可以用到序列上,而且数组的数学和统计函数也同样可以用到序列上。另外序列会有更多的其他处理方法,如下:

    import pandas as pd
    import numpy as np
    gdp1 = pd.Series([2.8,3.01,8.99,8.59,5.18])
    gdp2 = pd.Series({'北京':2.8,'上海':3.01,'广东':8.99,'江苏':8.59,'浙江':5.18})
    gdp3 = pd.Series(np.array((2.8,3.01,8.99,8.59,5.18)))
    # print(gdp1)
    # print(gdp2)
    # print(gdp3)
    print('行号风格的序列: ',gdp1[[0,3,4]]) #取出gdp1中的第1 4 5个元素
    print('行名称风格的序列: ',gdp2[[0,3,4]]) #取出gdp2中第 1 4 5个元素   取出的是字典的键值对
    print('行名称风格的序列: ',gdp2[['上海','江苏','浙江']])     # 取出的是键值对
    print('通过numpy函数: ',np.log(gdp1))     #可以用函数的方式直接取出相应对应的结果的值,通过numpy的方式需要通过其索引
    print('通过numpy函数: ',np.mean(gdp1))     
    print('通过序列的方法: ',gdp1.mean())     #可以看出序列也是支持方法的使用的

    out:

    行号风格的序列: 
      0    2.80
    3    8.59
    4    5.18
    dtype: float64
    行名称风格的序列: 
     北京    2.80
    江苏    8.59
    浙江    5.18
    dtype: float64
    行名称风格的序列:
     上海    3.01
    江苏    8.59
    浙江    5.18
    dtype: float64
    通过numpy函数:
     0    1.029619
    1    1.101940
    2    2.196113
    3    2.150599
    4    1.644805
    dtype: float64
    通过numpy函数:
     5.714
    通过序列的方法:
     5.714

    针对上面的代码需要说明几点,如果序列是行名称风格,既可以使用位置(行号)索引,又可以使用标签(行名称)索引;如果需要对序列进行数序函数的运算,一般首选numpy模块,因为pandas模块在这方面比较缺乏;如果是对序列做统计运算,既可以使numpy模块中的函数,也可以使用序列中的方法。一般首选

    序列方法,因为序列方法更加丰富一些,如计算序列的偏度,峰度,而Numpy是没有这样的函数的。

    构造数据框

       数据实质上就是一个数据集,数据集的行代表每一条观测,数据集的列则代表各个变量。在一个数据框中可以存放不同数据类型的序列,如整数型,浮点型,字符型和日期时间型,而数组和序列则没有这样的优势,因为他们只能存放同质数据。构造一个数据库可以应用如下方式:

    1.通过嵌套的列表或元组构造

    2.通过字典构造

    3.通过二维数组构造

    4.通过外部数据的读取构造。

    示例:

    import pandas as pd
    import numpy as np
    df1 = pd.DataFrame([['张三',23,'男'],['李四',27,'女'],['王五',26,'女']])
    df2 = pd.DataFrame({'姓名':['张三','李四','王五'],'年龄':[23,27,26],'性别':['男','女','女']})
    df3 = pd.DataFrame(np.array([['张三',23,'男'],['李四','27','女'],['王五',26,'女']]))
    print('嵌套列表构造数据框: ',df1)
    print('字典构造数据框: ',df2)
    print('二维数组构造数据框: ',df3)

    out:

    嵌套列表构造数据框:
         0   1  2
    0  张三  23  男
    1  李四  27  女
    2  王五  26  女
    字典构造数据框:
        姓名  年龄 性别
    0  张三  23  男
    1  李四  27  女
    2  王五  26  女
    二维数组构造数据框:
         0   1  2
    0  张三  23  男
    1  李四  27  女
    2  王五  26  女

    构造数据框需要使用到Pandas模块中的DataFrame函数,如果通过嵌套列表或元组构造数据框,则需要将数据框的每一行观测座位嵌套列表或元组的元素;如果通过二维数组构造数据框,则需要将数据框的每一行写入到数组的行中;如果通过字典构造数据框,则字典的键构成数据框的变量名,对应的值构成数据的观测。尽管上面的代码都可以构造数据框,但是讲嵌套列表,元组或二维数组转换为数据框时,数据框是没有具体的变量名的,只有从0到N的列号。所以,如果需要手工构造数据框的话,一般首选字典方法。

    外部数据的读取

    外部数据的读取来构造数据框的内容会比较多,下一篇再来记录...

    
    
  • 相关阅读:
    [LeetCode] Letter Combinations of a Phone Number
    [LeetCode] Combinations
    [Algorithms] Longest Increasing Subsequence
    2.Orange安装
    1.Orange是什么鬼?
    5.motan之注解方式配置
    4.motan之集群调用
    3.motan之异步调用
    2、motan入门程序
    1、微博RPC框架Motan
  • 原文地址:https://www.cnblogs.com/tinglele527/p/11760822.html
Copyright © 2011-2022 走看看