Pandas-DataFrame总结(构造与读入数据)

来源:互联网 发布:基金开户数据 编辑:程序博客网 时间:2024/06/07 07:24
简述:

    Pandas的重要数据结构DataFrame在大数据运算中起着十分重要的作用,尤其是他的向量形式在大数据计算中很高效,DataFrame的基本结构如下:

                             字段1    字段2    字段3  ...  字段n

                 索引0    v01         v02       v03           v0n

                 索引1    v11         v12       v13           v1n

                 索引2    v21         v22       v23           v2n

                  ...........................................................

                 索引m    vm1         vm2       vm3           vmn

 一. DataFrame的构造方式

1. 通过list构造DF

# -*- coding:utf-8 -*-import pandas as pddf = pd.DataFrame([data = ['a', 'b', 'c'], ['d', 'e', 'f'],['g', 'h', 'i']],columns = ['field1', 'field2', 'field3'])

     这是最简单的创建形式,传入的list一般是多维度的,且每一维度元素数目如果不一致,则DataFrame默认字符型缺失值为None,数值型缺失值为NaN(not a number);当list中传入的数据类型不一样时,遵循如下规则:

       ① list中如果有string类型则默认DataFrame该列为string类型

       ② list中如果是整数和小数,则小数对应的列是float类型

    columns指定的是列名(也就是之前结构中的字段名)。columns参数传入的sequence的长度与多维数组中的列数等长,否则会报错。

    其他创建DataFrame的参数还有:

        ① index(索引),他在官方文档中的定义为’Index to use for resulting frame. Will default to np.arange(m) ifno indexing‘,即默认是从0到m-1 (行数-1)。也可以自行设置一个序列用于作为索引,该序列中的元素数目必须与行数一致。

        ② dtype(类型),在官方文档中的解释为’Data type to force, otherwise infer‘,即用于强制转换数据类型,如果不指定则由Python自行推导。dtype的强制转换能力不是无限的,不可能将string转换为数值类。

2. 通过元组构造DF


     形式与list构建DataFrame相近,只是将list换成了tuple类型。

3. 通过字典构造DF

# -*- coding:utf-8 -*-import pandas as pddf = pd.DataFrame({'goods':['coke cola', 'eggplant','condom'], 'quantity':[12,3,1], 'price':[20,12,80]})
      简单的来说,利用Python的字典构造DataFrame就是讲DataFrame类中的data和columns参数合二为一,键值就是生成的DataFrame的列名。由于Python的字典是无序的,所以在不指定列的顺序的情况下,dict生成的DataFrame的列名顺序是随机的,如果列的顺序很重要,那么久再次对DataFrame中的columns参数进行设置,将字典中原有的键值进行排序。注意,此时上传的columns必须与dict中的键值一致,否则生成失败。

二. 读取数据生成DataFrame


1. 读取文本文件


    读取文本文件所用的函数一般有两个① read_csv() 和 ② read_table(),文本文件一般读取的是csv格式和txt格式。  

#-*- coding:utf-8 -*-import pandas as pdres = pd.read_table('sale.txt', sep = '\t', header = None, usecol = [1,3,4], names = ['goods','quantity','price'])
     这是read_table()最基本的使用,该方法中常用的参数如下:

     ① filepath_or_buffer:这个是第一个参数,可以是字符串也可以是一个代表着文件路径的变量,是所要读取的文件的路径。

     ② sep:是separate的缩写,在文本文件中不同列的数据通常情况下是用相同的字符间隔开的,常用的有逗号、制表符、空格等。该参数默认是制表符,如果是其他形式的间隔应在方法中设置该参数。

     ③ header :设置某行作为字段名,默认是索引值为0的行(第一行)。如果文件中没有列名,应设置该值为 None。

     ④ names:一个list,元素是DataFrame的列名,在文件中没有header列且明确指明参数 header = None时使用。list中的元素个数一定与DataFrame的列数相同。

     ⑤ index_col:是一个int、序列或者是False,默认值是None。这个参数的作用是选文件中的一列数据作为DataFrame的索引值。int是文件中列对应的索引;输入的序列是文件中该列的列名(这个比较常用);Flase则是强制pandas不选用文件的第一列作为DataFrame的索引。

     ⑥ usecols:当不必要加载文件中所有列进入DataFrame时,可以指定加载的列。官方文档中说明'a valid array-likeusecols parameter would be [0, 1, 2] or [‘foo’, ‘bar’, ‘baz’].',即usecols的形式有两种,一种是数值类型的list,数值对应的是相应列在文件中的索引;另一种是字符串类型的list,其中的元素对应的是文件中对应列的列名。

     ⑦ nrows : int, default None,这个参数是需要读取的行数(从文件头开始算起)。
     ⑧ na_values : scalar, str, list-like, or dict, 默认是 None,这个参数设定的是一组被视为NA/NaN的值。
     ⑨ true_values : list, 默认是None。官方文档解释'Values to consider as True',被认定为是’真‘的值。

     ⑩ false_values : list, 默认为None,与true_values相似,是一组被视为’假‘得值。

     还有一个是chunksize,这个参数以后详细说明。

     read_csv() 和 read_table()很相似,两个都常被用于读取文本文件,区别是二者sep参数的默认值不同。前者的sep默认为逗号;后者则是默认为制表符。

2. 读取Excel表格数据

    pandas模块中,read_excel()方法用于读取 .xls和 .xlsx文件

#-*- coding:utf-8 -*-import pandas as pddf = pd.read_excel(io='***.xlsx',sheetname=1,header=0,index_col= None,names = None,dtype=None )
    上方代码是read_excel的一个简单案例,read_excel中的常见参数解析如下:

    ① io: io变量是所读取文件的路径,是必填参数。

    ② sheetname: excel表格中存在着不同的sheet,读取时如果对sheet没要求则pandas默认读取索引为0的sheet。官方文档中的解释'string, int, mixed list of strings/ints, or None, default 0',即 sheetname参数可以是整数、字符串、列表或者None。当为int时,指的是sheet的索引;string是相应的sheet的名称;list中元素可以是sheet的索引也可以是sheet的名称;当定义该变量为None时,是该excel表格中所有的sheet。
     ③ index_col:默认是None(就是没有作为索引的MySQL数据表的列),如果有要作为索引的列,则填入该列在数据表中的名称 。
    ④ columns:当不读取table中所有的列时,输入该参数,形式是list,元素是table中所要读取的列名。

read_sql_table()

#-*- coding:utf-8 -*-import pandas as pdimport MySQLdb as mdbconn = mdb.connect(host = 'localhost',port=3306,user= 'root',passwd='*****',db = 'test')df = pd.read_sql_table(table_name='table1',con=conn,index_col='col1',columns=['col1','col2'...])
    read_sql_table()方法与read_sql()方法的一个区别就是无法对读取的数据限定条件(如SQL的where语句)。其参数与read_sql()方法极其相似只是第一个参数table_name输入的是数据库中所要读取的表的名字。


三. 生成数据的预览

1. shape属性

#-*- coding:utf-8 -*-import pandas as pdimport MySQLdb as mdbconn = mdb.connect(host = 'localhost',port=3306,user= 'root',passwd='*****',db = 'test')df = pd.read_sql_table(table_name='table1',con=conn,index_col='col1',columns=['col1','col2'...])df.shape
    shape属性返回的是一个tuple,二维的DataFrame显示的是(x,y),其中x是行数,y是列数。Pandas的Dataframe的shape属性输出的不是索引,而是实实在在的几行几列,所以要格外注意。

2. columns属性

#-*- coding:utf-8 -*-import pandas as pd#-*- coding:utf-8 -*-import pandas as pdimport MySQLdb as mdbconn = mdb.connect(host = 'localhost',port=3306,user= 'root',passwd='*****',db = 'test')df = pd.read_sql_table(table_name='table1',con=conn,index_col='col1',columns=['col1','col2'...])df.columns
    返回的形式是 Index(['column1','column2',...'colmun N'])这样的形式,显示的是各列的名字。

3.describe属性

#-*- coding:utf-8 -*-import pandas as pdimport MySQLdb as mdbconn = mdb.connect(host = 'localhost',port=3306,user= 'root',passwd='*****',db = 'test')df = pd.read_sql_table(table_name='table1',con=conn,index_col='col1',columns=['col1','col2'...])df.describe

    describe()方法用于描述DataFrame,其中有个 include参数,写入的是字符串或者一个列表,里面的元素是要查看的数据类型。

未完待续~



原创粉丝点击