Pandas—CSV文件读入和处理

1 Pandas—CSV文件读取

Pandas读取CSV文件的方式比较简单,使用的是read_csv的接口函数,首先我们来看该函数的常见参数

  1. filepath_or_buffer:首先是文件路径参数,这个参数所指向的文件URL的形式,URL指向的可以是http,ftp,s3,csv等等类型的文件。其中最为常见的就是CSV文件。
  2. sep:CSV文件中的分割符,这个参数的作用在于如何来分割csv文件中的不同的列,如果不进行设置,C语言后台程序不能够自动的检测到分割符,此时会使用Python内置的嗅探方法csv.sniffer来进行判断。这里需要注意的是,长度超过1个字节分,并且不同于’\s+'的分隔符,会被内部解析成正则表达式,正则表达式容易忽略引用数据。(转义字符的应用),例如"\r\t"来增加转义字符。reed_csv方法默认的分隔符为逗号
  3. head 该参数的形式为一个int 或者一个元素为int的list,默认值为’infer’,该参数的作用是用来确定当前CSV文件的各个列的列明,这个很好理解,常规的CSV文件的第0行一般是各个列的列名称。当选择默认或者head=0的时候,此时确定文件中的第1行行数据(如果设置skip_blank_lines=True,这里将忽略空行和注释行的)是各个列的列名称。如果head=None,此时列名称是后面参数传入的,也就是当前文件中不包括列的名称。这里需要注意的是,我们可以传入一个列序号组成的list来作为实参,当对于没有被出入的列的序号,在读取的时候将会跳过。
  4. name:各个列的名称的list,如果文件中部包含列的名称,也就是head参数被设置为了None,此时需要我们通过该参数自己传入列的名称的list。
  5. index_col参数,输入类型可以是int,str,str/int的序列等等。默认参数为None,这个参数指明了当前CSV的所有列。如果传入的是一个序列,那么代表使用的是多级索引。注意:当设置该参数为False的时候,pandas不在使用首列来作为索引列。这种方式的使用情景是CSV文件每行下面都有一个分隔符。
  6. usecols:参数形式是一个list或者callable,默认为None,这个参数的作用是用于选择指定的列,返回的结果是按照给定列名称而生成的子集。如果给定是一个list的形式,那么list中的元素应该是代表列的序号或者列的名称。在传入的时候,可以list中的元素顺序。如果传入的是callable的方式,可以根据传入的函数,来根据列来进行计算。返回的是调用函数的结果为TRUE的名称子集。
  7. mangle_dupe_cols:参数形式为True或者False,默认值为True,这个参数的主要的作用当列名有重复的时候,将重复的列名解析成X.1,X.2的形式。
  8. dtype:参数为某一列或者全部的数据的类型名称,形式为名称字符串或者dict(“列名”:“数据类型名称”)。

read_csv的参数比较多,这里只介绍比较常用的参数,有兴趣的读者可以参考官方文档,下面我们来实现一个读取实例:

首先,给出文件的格式:

android csv文件读写操作 csv文件的读取_android csv文件读写操作

data = pandas.read_csv(filepath,usecols=[0,1,3,4,5])
print(data)

这里,数据的第二列是空列,所以我选择的是传入usecols参数来确定需要的列。
读取之后的结果为:

android csv文件读写操作 csv文件的读取_数据_02

2 数据处理

读取之后,我们可能会需要将数据进行处理,比如抽取出每一个列的数据来进行分别保存,任何进行下一步的处理:

def getData(filepath):
    data = pandas.read_csv(filepath,usecols=[0,1,3,4,5])
    cols = list(data.columns) #获取列数据
    # 分别对每一列数据进行抽取,整理成dict的形式
    result_dict = {}
    for key in cols:
        # 这里将所有的ID值-500
        if key == 'Id':
            temp = [item-500 for item in data[key]]
            result_dict[key] = temp
        else:
            result_dict[key] = list(data[key])
    return result_dict

后面集可以利用Python方法正常的处理数据了。