zoukankan      html  css  js  c++  java
  • 【学习】数据的加载、存储与文件格式【pandas】

    输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用web API操作网络资源

    1、读写文本格式的数据

    pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,其中read_csv和read_table为用得最多的

    #函数说明
    """
    =========函数说明==========
    read_csv 从文件、URL、文件型对象中加载带分隔符的数据,默认分隔符为逗号
    read_table  从文件、URL、文件型对象中加载带分隔符的数据,默认分隔符为制表符(”	“)
    read_fwf 读取定宽列格式数据(也就是说,没有分隔符)
    read_clipboard 读取剪贴板中的数据,可以看到read_table的剪贴板版。在将网页转换为表格时很有用
    """

    这些函数的选项可以划分为以下几个大类:

    索引:将一个或多个列当作返回的DataFrame处理,以及是否从文件、用户获取列名

    类型推断和数据转换:包括用户定义值的转换、缺失值标记列表等

    日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合成结果中的单个列

    迭代:支付对大文件进行逐块迭代

    不规整数据问题:跳过一些行、页脚、注释或其他一些不重要的东西(比如成千万上万个逗号隔开的数值数据)

    类型推断是这些函数中最重要的功能之一,也就是说,你不需要指定列的类型到底是数值、整数、布尔值,还是字符串。

    比如有一个文件ex1.csv

    #用read_csv读取
    
    df = pd.read_csv('ex1.csv')
    
    #用read_table函数, 但需要指定分隔符而已
    
    df = pd.read_table('ex1.csv', sep = ',')

    并不是所有文件都有标题行,有两个办法,一个是默认,另一个是自定义列名

    #默认标题名
    pd.read_csv('ext1.csv', header=None)

    #指定列名
    pd.read_csv('ex1.csv', names = ['a', 'b', 'c', 'd', 'message'])

    #假设读取出来的df数据内容为以下,为了展示用
    """

    """

    #如果你希望将message列做成DataFrame 的索引, 可以明确表示要将该列放在索引4的位置上,也可以通过index_col参数指定“message”
    pd.read_csv('ex1.csv', names = ['a', 'b', 'c', 'd', 'message'], index_col = 'message')

    #缺失值处理是文件解析任务中的一个重要组成部分
    #na_values可以接受一组用于表示缺失值的字符串
    pd.read_csv('ext1.csv', na_values = ['NULL'])
    #可以用一个字典为各列指定不同的NA标记值
    #read_csv/read_table函数的参数

     

    注意:encoding可以规范编码格式,utf-8一般可以防止中文乱码;

               nrows需要读取的行数(从文件开始处算起);

               data_parser用于解析日期的函数;

               parse_dates 尝试将数据解析为日期,默认为False,如果为True,则尝试解析所有列。

               names 用于结果的列名列表,结合header = None

               chunksize 文件块的大小(用于迭代)

    如果用到选项和属性再加上,做好笔记是一个很好的习惯。。。。。。。。。

    2、逐块读取文本文件

    如果只想读取几行,通过nrows进行指定即可

    pd.read_csv('ext1.csv', nrows = 5)

    要逐块读取文件,需要设置chunksize(行数):

    pd.read_csv('ex.csv', chunksize = 1000)
    #返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代
    tot = Series[]
    for piece in chunker:
      tot = tot.add(piece['key'].value_counts(), fill_value = 0)
    tot = tot.order(ascending = False)
    #TestParser还有一个get_chunk方法,它使你可以读取任意大小的块

    3、将数据写出到文本格式

    利用DataFrame的to_csv方法,可以将数据写到一个以逗号分隔的文件中,当然也可以使用其他分隔符

    也可以只写出一部分的列

    #3、将数据写出到文本格式
    df = pd.DataFrame(np.random.randn(4,5), columns = ['name1', 'name2', 'name3', 'name4', 'name5'])
    df
    df.to_csv('out1.csv')
    df.to_csv('out2.txt', sep = '|')
    #将缺失值在输出结果中被表示为空字符串,也可以表示 为别的标记值, 用na_sep参数
    df.to_csv('out2.txt', na_sep = 'NULL')
    #如果没有设置其他选项,则会写出行和列的标签,可以禁用标签
    df.to_csv('out1.csv', index = False, header = False)
    #只写出一部分列,并以指定的顺序排列
    df.to_csv('out2.csv', index = False, columns = ['name1', 'name2'])
    #将文本读取为Series,但是要无header行,第一列作索引

    CSV函数选项

    注意:对于那些使用复杂分隔符或多字符分隔符的文件,你就只能使用字符串的split方法或正则表达式方法re.split进行行拆分和其他 整理工作

    4、Json数据格式

    import json

    result = json.loads(obj)

    asjson = json.dumps(result)

    5、XML数据格式

    XML是另一种常见的支持分层、嵌套数据以及元数据的结构化数据格式,这个会有另外一个文档说明,有时候XML非常复杂,但在数据分析过程中也非常常见

  • 相关阅读:
    20180604_Myeclipse下配置SVN报错问题 svn
    20180603_升级Win10后,远程连接桌面连接,出现身份验证错误!
    20180603_navicat 连接sqlserver提示要安装 sql server native client
    VB.net程序实现分页
    多线程Demo
    多线程Demo VB.net
    SQLServer数据库子结构
    SQLServer数据库常用命令
    传播路径图调查2013年初
    拾遗
  • 原文地址:https://www.cnblogs.com/yizhenfeng/p/7512354.html
Copyright © 2011-2022 走看看