Pandas数据读写

作者: IMISer | 来源:发表于2017-08-09 00:09 被阅读144次

    Pandas数据读写

    读写CSV

    • csvframe=pd.read_csv('myCSV01.csv') 将CSV文件转换为frame
      文件的第一行默认为列标题。如果不指定列标题可以添加参数,也可以自己制定:read_csv('myCSV01.csv',header=None)
      read_csv('myCSV01.csv',names=['','',..])
    • 指定索引
      read_csv('',index_col=[]) 可以制定列成为左边的索引(主要用于多级索引存在的情况)
      frame.to_csv('目标文件')
      需要注意的是,写入到目标文件后的NaN值变成了空字符,可以用参数来填充:
      frame.to_csv('目标文件',na_rep='NaN')

    TXT文件

    用RegExp解析TXT文件

    有时需要解析的数据文件不是以逗号或者分好分割的,对于这种情况,正则表达式就能派上用场。指定对应的正则表达式应用在函数read_table()中。

    • . 换行符以外的单个字符
    • \d  数字
    • \D  非数字字符
    • \s  空白字符
    • \S 非空白字符
    • \n  换行符
    • \t 制表符
      pd.read_table('test01.txt',sep='\s')  \s的意思是一个或多个非空字符
      多余行的处理:
      read_table('test01.txt',sep='\s*',skiprows=[0,1,2,5,6])
      skiprows用来指定忽略哪一行, skiprows=5表示忽略前五行

    HTML

    read_html() 和to_html() 都针对的是html中的表格结构。个人感觉意义不是很大。略过

    从XML读取数据

    <?xml version="1.0"?>
    <Catalog>
        <Book id="ISBN01">
        <Author>Mark </Author>
        <Title>XML CookBook</Title>
        <Genre>Computer</Genre>
        <Price>13.4</Price>
        <PublishDate>2017-08-08</PublishDate>
        </Book>
    
        <Book id="ISBN02">
        <Author>Babara </Author>
        <Title>XML C++Book</Title>
        <Genre>Computer</Genre>
        <Price>35.95</Price>
        <PublishDate>2017-08-07</PublishDate>
        </Book>
    </Catalog>
    
    import pandas as pd
    from lxml import objectify
    
    xml=objectify.parse('test01.xml')
    root=xml.getroot()
    
    def etree2frame(root):
        column_names=[]
        for i in range(len(root.getchildren()[0].getchildren())):
            column_names.append(root.getchildren()[0].getchildren()[i].tag)
        xml_frame=pd.DataFrame(columns=column_names)
        for j in range(len(root.getchildren())):
            text=[]
            obj=root.getchildren()[j].getchildren()
            for k in range(len(column_names)):
                text.append(obj[k].text)
            row=dict(zip(column_names,text))
            row_s=pd.Series(row)
            row_s.name=j
            xml_frame=xml_frame.append(row_s)
        return xml_frame
    
    print(etree2frame(root))
    

    结果显示:

    Excel

    准确来讲是 MicroSoft Excel
    pd.read_excel('data.excel','sheet1')
    frame.to_excel('data2.xlsx')

    JSON

    javascript object notation
    frame.to_json('frame.json') 生成json的文件
    pd.read_json('frame.json')

    [
        {
            "writer":"Mark Ross",
            "nationality":"USA",
            "books":[
                {"title":"XML cookbook","price":25.56},
                {"title":"javascript leaning","price":15.56},
                {"title":"json book","price":21.56}
            ]
        },
        {
            "writer":"Mark Ross",
            "nationality":"USA",
            "books":[
                {"title":"XML cookbook","price":25.56},
                {"title":"javascript leaning","price":15.56},
                {"title":"json book","price":21.56}
            ] 
        }
    ]
    

    首先加载json文件及其内容,并将其转换为一个字符串
    file=open('books.json')
    text=file.read()
    text=json.loads(text)
    from pandas.io.json import json_normalize
    json_normalize(text,'books')
    第二个参数指定books就可以读取所有以books作为键的元素的值。元素中所有属性将会转换为DataFrame元素。
    第三个参数可以用与books同级别的键:
    json_normalize(text,'books',['nationality','writer'])

    读写数据库

    通用数据库连接方法:from sqlalchemy import create_engine
    engine=create_engine('数据库所在路径')
    frame.to_sql('数据库名',engine)
    pd.read_sql('colors'数据库名,engine)
    pd.read_sql_query('SQL查询语句',engine)

    读写MongoDB

    上面所说都是关系型数据库,那么读写以MongoDB为代表的NoSQL需要借助数据库本身的库。
    pymongo

    相关文章

      网友评论

        本文标题:Pandas数据读写

        本文链接:https://www.haomeiwen.com/subject/hdzxrxtx.html