zoukankan      html  css  js  c++  java
  • Python 数据分析4

    本章概要

      数据加载、存储与文件格式

    数据加载、存储与文件格式

    读取文本格式数据

    read_csv 默认是按照逗号分割,也可设定其他分割符

    df = pd.read_csv('file', sep='|')

    也可以使用read_table,但是必须要指定分隔符

    df = pd.read_table('examples/ex1.csv', sep=',')

     一些参数设置

    pd.read_csv('examples/ex2.csv', header=None)
    # 一些文件没有列标题,可以设置文件头为空
    
    pd.read_csv('examples/ex2.csv', names=['a', 'b', 'c', 'd', 'message'])
    # 也可以为没有列标题的文件自定义列标题
    
    pd.read_csv('examples/ex2.csv', names=names, index_col='message')
    # 自定义的列标题中的message列放到索引位置
    
    parsed = pd.read_csv('examples/csv_mindex.csv', index_col=['key1', 'key2'])
    # 使用文件内多个列做成层次化索引
    
    result = pd.read_table('examples/ex3.txt', sep='s+')
    # 有些时候表格不是按照固定的分割符去分割字段的,可以在分隔符参数传入正则表达式 这里的s+表示的是匹配空格符,空格,制表符,换页符
    
    pd.read_csv('examples/ex4.csv', skiprows=[0, 2, 3])
    # 有些文件可能会有一些注释,描述性文字在文件头,可以通过skiprows参数跳过指定行
    
    result = pd.read_csv('examples/ex5.csv')
    pd.isnull(result)
    # 判断dataframe里面的每个值是否为空,在值的位置返回布尔值
    
    result = pd.read_csv('examples/ex5.csv', na_values=['NULL'])
    # 可以接受列表来表示缺失值的字符串
    
    sentinels = {'message': ['foo', 'NA'], 'something': ['two']}
    pd.read_csv('examples/ex5.csv', na_values=sentinels)
    # 可以用字典为指定列定制不同的NA标记值

    逐块读取文本文件

    在处理大文件时,可能只是想读取文件的一小部分或逐块对文件进行迭代。

    pd.options.display.max_rows = 10

    设置大文件的dataframe显示10行,前5后5

    pd.read_csv('examples/ex6.csv', nrows=5)
    # 只读取5行
    
    chunker = pd.read_csv('ch06/ex6.csv', chunksize=1000) 
    chunker
    <pandas.io.parsers.TextParser at 0x8368250>
    # read_csv所返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代。
    
    chunker = pd.read_csv('examples/ex6.csv', chunksize=1000)
    
    tot = Series([])
    for piece in chunker:
        tot = tot.add(piece['key'].value_counts(), fill_value=0)
    
    tot = tot.sort_values(ascending=False)
    # 我们可以迭代处理ex6.csv,将值计数聚合到"key"列中

    数据写出到文本格式

    data = pd.read_csv('test/ex5.csv')
    # 读取文件到dataframe
    
    data.to_csv('test/out.csv')
    # 将数据写入文件,默认逗号分割
    
    data.to_csv(sys.stdout, sep='|')
    # 也可以设定分隔符
    
    data.to_csv(sys.stdout, na_rep='NULL')
    # 缺失值在输出结果中会被表示为空字符串
    
    data.to_csv(sys.stdout, index=False, header=False)
    #可以禁用行列索引
    
    data.to_csv(sys.stdout, index=False, columns=['a', 'b', 'c'])
    # 还可以指定写入你需要的列,并按顺序排列
    
    series.to_csv('examples/tseries.csv')
    # series也有写如的to_csv方法

    处理分隔符格式

    大部分存储在磁盘上的表格型数据都能用pandas.read_table进行加载。然而,有时还是需要做一些手工处理。由于接收到含有畸形行的文件而使read_table出毛病的情况并不少见。为了说明这些基本工具,看看下面这个简单的CSV文件:

    In [1]: !cat examples/ex7.csv
    "a","b","c"
    "1","2","3"
    "1","2","3"

    对于任意单字符分隔符文件,可以直接使用内置的csv模块,将任意已打开的文件或文件型的对象传给csv.reader

    import csv
    f = open('examples/ex7.csv')
    reader = csv.reader(f)
    In [2]: for line in reader:
       ....:     print(line)
    ['a', 'b', 'c']
    ['1', '2', '3']
    ['1', '2', '3']

    现在,为了使数据格式合乎要求,你需要对其做一些整理工作。我们一步一步来做。首先,读取文件到一个多行的列表中: 

    In [3]: with open('examples/ex7.csv') as f:
       ....:     lines = list(csv.reader(f))

    然后,我们将这些行分为标题行和数据行:

    In [4]: header, values = lines[0], lines[1:]

    然后,我们可以用字典构造式和zip(*values),后者将行转置为列,创建数据列的字典:

    In [5]: data_dict = {h: v for h, v in zip(header, zip(*values))}
    In [6]: data_dict
    Out[7]: {'a': ('1', '1'), 'b': ('2', '2'), 'c': ('3', '3')}

    CSV文件的形式有很多。只需定义csv.Dialect的一个子类即可定义出新格式(如专门的分隔符、字符串引用约定、行结束符等):

    class my_dialect(csv.Dialect):
        lineterminator = '
    '
        delimiter = ';'
        quotechar = '"'
        quoting = csv.QUOTE_MINIMAL
    reader = csv.reader(f, dialect=my_dialect)

    各个CSV语支的参数也可以用关键字的形式提供给csv.reader,而无需定义子类:

    reader = csv.reader(f, delimiter='|')

    要手工输出分隔符文件,你可以使用csv.writer。它接受一个已打开且可写的文件对象以及跟csv.reader相同的那些语支和格式化选项:

    with open('mydata.csv', 'w') as f:
        writer = csv.writer(f, dialect=my_dialect)
        writer.writerow(('one', 'two', 'three'))
        writer.writerow(('1', '2', '3'))
        writer.writerow(('4', '5', '6'))
        writer.writerow(('7', '8', '9'))

    其他格式的数据读取

    https://www.jianshu.com/p/047d8c1c7e14,有需求的时候看一下就好了,没必要太关注

  • 相关阅读:
    Linux下的 .o、.a、.so文件
    第三章、主机规划与磁盘分区
    debian linux中文桌面系统安装
    C++开源库,欢迎补充。
    C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)
    C# CPU,硬盘,mac地址灯本地信息查询
    打造属于自己的支持版本迭代的Asp.Net Web Api Route
    PreApplicationStartMethodAttribute的使用
    Web Api in Orchard
    Dependency Injection in ASP.NET Web API 2 Using Unity
  • 原文地址:https://www.cnblogs.com/wuzdandz/p/9861499.html
Copyright © 2011-2022 走看看