zoukankan      html  css  js  c++  java
  • pandas之IO数据读写

    一前言

    本篇文章读者如果学完,将会基本的pandas的IO操作API,为后面的数据分析打下坚实基础,基本通用的数据读写知识追寻者都已经给出示例,nosql这块请读者自行学习;如果文章觉得不错,随手点赞关注谢谢;读者的肯定就是对作者创作的最大支持;

    公众号:知识追寻者

    知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

    二 CSV数据读写

    2.1读取csv

    zszxz_01.csv文件内容如下

    number1,number2,number3,number4
    1,2,3,4
    5,6,7,8
    9,10,11,12
    

    使用read_csv() 函数可以读取csv文件

    csv_frame = pd.read_csv("../file/zszxz_01.csv")
    print(csv_frame)
    

    输出

       number1  number2  number3  number4
    0        1        2        3        4
    1        5        6        7        8
    2        9       10       11       12
    

    2.2 指定表头读取CSV

    zszxz_02.csv文件内容如下

    1,2,3,4
    5,6,7,8
    9,10,11,12
    

    使用names参数指定表头读取CSV

    csv_frame = pd.read_csv("../file/zszxz_02.csv",names=['number1','number2','number3','number4'])
    print(csv_frame)
    

    输出

       number1  number2  number3  number4
    0        1        2        3        4
    1        5        6        7        8
    2        9       10       11       12
    

    2.3 将列指定为索引读取CSV

    zszxz_03.csv文件内容如下

    user1,number1,number2,number3
    u1,2,3,4
    u5,6,7,8
    u9,10,11,12
    

    使用参数index_col将列user1指定为索引读取CSV

    csv_frame = pd.read_csv("../file/zszxz_03.csv",index_col=['user1'])
    print(csv_frame)
    

    输出

           number1  number2  number3
    user1                           
    u1           2        3        4
    u5           6        7        8
    u9          10       11       12
    

    2.4读取指定区间段

    zszxz_02.csv

    1,2,3,4
    5,6,7,8
    9,10,11,12
    13,14,15,16
    

    读取指定区间段,意指读取文件中选定的行数;其中skiprows 属性 表示 跳过几行,行数从1 开始;由于文件中没指定列,这边可以使用header 指定为None,表示读取时不设置表头;

    csv_frame = pd.read_csv('../file/zszxz_02.csv',skiprows=1, nrows= 2, header=None)
    print(csv_frame)
    

    输出

       0   1   2   3
    0  5   6   7   8
    1  9  10  11  12
    

    2.5 逐块读取

    zszxz_01.csv

    number1,number2,number3,number4
    1,2,3,4
    5,6,7,8
    9,10,11,12
    

    逐块读取的含义类似矩阵中的分块矩阵,可以将矩阵切分为多个矩阵;分块后的数据集就是独立的部分;可以使用chunksize 属性指定分为几块;如下所示 chunksize = 2 表示分为两块,前面2 行一块,后面一行为1块;如果chunksize = 3 ; 就是每行一块;

    csv_frame = csv_frame = pd.read_csv('../file/zszxz_01.csv', chunksize=2)
    i = 0
    for piece in csv_frame:
        print(piece)
    

    输出

       number1  number2  number3  number4
    0        1        2        3        4
    1        5        6        7        8
       number1  number2  number3  number4
    2        9       10       11       12
    

    2.6写入 csv文件

    写入csv文件使用 to_csv() 函数,当然也可以使用 sep 参数指定分割符号;

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    """ 写入 csv"""
    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    frame.to_csv('../file/zszxz_w_01.csv')
    

    文件内容

    ,zszxz,craler,rose
    user1,0,1,2
    user2,3,4,5
    user3,6,7,8
    

    三 读写txt

    读取二进制文件中,常见的就是txt文本,txt文件的读取非常简单;

    3.1 读取txt

    zszxz_04.txt

    user1 number1 number2 number3
    u1 2 3 4
    u5 6 7 8
    u9 10 11 12
    

    使用read_table()函数可以读取txt文件,其中分割符 s 是表示空白符号,一般是使用指定符号,s 是正则符号,更多的正则内容可以参照知识追寻者的正则文章进行学习;

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    csv_frame = pd.read_table("../file/zszxz_04.txt",sep='s',engine='python')
    print(csv_frame)
    

    输出

      user1  number1  number2  number3
    0    u1        2        3        4
    1    u5        6        7        8
    2    u9       10       11       12
    

    3.2 跳行读取

    skiprows 表示跳行,跳的是给定的行数,数字从0开始表示第一行;与 skiprows 不同,其是跳了几行;

    skiprows=[0,1] 与 skiprows=2 相同

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    csv_frame = pd.read_table("../file/zszxz_04.txt",sep='s',engine='python',skiprows=[0,1])
    print(csv_frame)
    

    输出

       u5   6   7   8
    0  u9  10  11  12
    

    3.3写入 txt文件并指定分割符号

    写入文件使用 to_table() 函数,不过知识追寻者使用to_csv 也成功了;

    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    frame.to_csv('../file/zszxz_w_02.txt', index=False, header=False, sep='*')
    

    文件内容

    0*1*2
    3*4*5
    6*7*8
    

    3.4写入 txt文件并替换空白字符

    本来NaN 的元素输入到文件后会是空白字符,换句话说就不是NaN,如果要使用文件中的空白字符为NaN,则需要指定属性 na_rep='NaN'

    index = ['user1','user2','user3']
    data = [[1,],
            [1,2],
            [1,2,3]]
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    # NaN写入文件为空白字符,使用na_rep属性可以替换
    frame.to_csv('../file/zszxz_w_03.txt', na_rep='NaN')
    

    文件内容

    ,zszxz,craler,rose
    user1,1,NaN,NaN
    user2,1,2.0,NaN
    user3,1,2.0,3.0
    

    四 html读写

    4.1读取网页数据

    读取html可以直接通过 read_html()函数,读取时是读取table标签内容的数据;

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    html = pd.read_html('https://fanyi.baidu.com/?aldtype=16047#auto/zh')
    print(html)
    

    输出

    [        0         1
    0    划词翻译       NaN
    1    实时翻译       NaN
    2    历史记录       NaN
    3     NaN       NaN
    4    发音语速    较慢中速较快
    5  英语发音偏好      美式英式
    6    发音模式  点击发音自动发音]
    

    4.2 编写html文档

    编写html网页使用 to_html()函数,不过缺点是写出得页面很丑;

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    """ 将dataFrame 转为 html 
    需要安装 html5lib	1.0.1	
    """
    
    #frame = pd.DataFrame(np.arange(4).reshape((2,2)))
    #print(frame.to_html())
    
    index = ['number','price','product']
    data = np.random.random((3,3))
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    
    doc = ['<!DOCTYPE html>']
    doc.append('<html>')
    doc.append('<head>')
    doc.append('<title>zszxz dataFrame</title>')
    doc.append('</head>')
    doc.append('<body>')
    # 将dataFrame添加至HTML body中
    doc.append(frame.to_html())
    doc.append('</body>')
    doc.append('</html>')
    html = '
    '.join(doc)
    
    with open('../file/zszxzFrame.html', 'w') as html_file:
        html_file.write(html)
    
    
    

    输出

    <!DOCTYPE html>
    <html>
    <head>
    <title>zszxz dataFrame</title>
    </head>
    <body>
    <table border="1" class="dataframe">
      <thead>
        <tr style="text-align: right;">
          <th></th>
          <th>zszxz</th>
          <th>craler</th>
          <th>rose</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>number</th>
          <td>0.382342</td>
          <td>0.509186</td>
          <td>0.906723</td>
        </tr>
        <tr>
          <th>price</th>
          <td>0.380164</td>
          <td>0.653920</td>
          <td>0.499396</td>
        </tr>
        <tr>
          <th>product</th>
          <td>0.450792</td>
          <td>0.506224</td>
          <td>0.627545</td>
        </tr>
      </tbody>
    </table>
    </body>
    </html>
    

    浏览器打开数据

    五 excel数据读写

    5.1读取默认sheet

    zszxz_05.xlsx

    user1	user2	user3
    zszxz01	zszxz02	zszxz03
    zszxz04	zszxz05	zszxz06
    zszxz07	zszxz08	zszxz09
    

    读取excel文件可以使用read_excel()函数默认读取sheet表单

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    """
    需要xlxd依赖 openpyxl
    """
    
    #默认获取第一sheet
    ex = pd.read_excel('../file/zszxz_05.xlsx')
    print(ex)
    

    输出

         user1    user2    user3
    0  zszxz01  zszxz02  zszxz03
    1  zszxz04  zszxz05  zszxz06
    2  zszxz07  zszxz08  zszxz09
    

    5.2 读取指定的sheet

    如果要指定读取某个工作表 则需要使用属性 sheet_name

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    ex = pd.read_excel('../file/zszxz_05.xlsx',sheet_name='Sheet1')
    print(ex)
    

    输出

         user1    user2    user3
    0  zszxz01  zszxz02  zszxz03
    1  zszxz04  zszxz05  zszxz06
    2  zszxz07  zszxz08  zszxz09
    

    5.3 写入excel

    写入 excel文件使用 to_excel() 函数

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    # 写入指定的sheet
    index = ['user1','user2','user3']
    data = np.arange(9).reshape(3,3)
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    frame.to_excel('../file/zszxz_06.xlsx',sheet_name='知识追寻者')
    

    文件内容

    	zszxz	craler	rose
    user1	0	1	2
    user2	3	4	5
    user3	6	7	8
    

    六 json数据读写

    6.1 写入json数据

    写入json文件 使用to_json() 函数

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    index = ['number','price','product']
    data = np.random.random((3,3))
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    frame.to_json('../file/zszxz_w_04.json')
    

    输出

    {
    	"zszxz": {
    		"number": 0.5790025071,
    		"price": 0.8834134206,
    		"product": 0.6333321225
    	},
    	"craler": {
    		"number": 0.5481312627,
    		"price": 0.7548320093,
    		"product": 0.6435874093
    	},
    	"rose": {
    		"number": 0.6774161492,
    		"price": 0.0685865804,
    		"product": 0.7100822242
    	}
    }
    

    6.2 读取json数据

    读取json文件使用 read_json() 函数

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    json = pd.read_json('../file/zszxz_w_04.json')
    print(json)
    

    输出

                zszxz    craler      rose
    number   0.223647  0.926946  0.159471
    price    0.827019  0.385435  0.600110
    product  0.438179  0.335952  0.068237
    

    七 读写数据库

    读写数据库,postgresql的示例如下,如果是其它数据库只需要改动引擎内容即可,比如mysql的引擎如下

    engine = create_engine('mysql+pymysql://username:password@ip:port/database')
    

    7.1 读取postgresql使用sql

    通过sql的方式读取表

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    from sqlalchemy import create_engine
    
    # 需要 psycopg2 依赖
    engine = create_engine('postgresql://postgres:123456@localhost:5432/python')
    # 查询语句
    sql_query = 'select * from student;'
    # 执行sql
    result = pd.read_sql_query(sql_query, engine)
    print(result)
    

    输出

       id  num   name
    0   1  100  zszxz
    1   2  101  zszxz
    2   5  102  知识追寻者
    3   6  102  知识追寻者
    

    7.2 读取postgresql表

    直接指定表名,读取整张表

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    from sqlalchemy import create_engine
    # 需要 psycopg2 依赖
    engine = create_engine('postgresql://postgres:123456@localhost:5432/python')
    # 执行sql
    result = pd.read_sql_table('student', engine)
    print(result)
    

    输出

       id  num   name
    0   1  100  zszxz
    1   2  101  zszxz
    2   5  102  知识追寻者
    3   6  102  知识追寻者
    

    7.3 写入数据至postgresql

    注意这边写入的数据库表会自动新建一张表;

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    from sqlalchemy import create_engine
    # 需要 psycopg2 依赖
    engine = create_engine('postgresql://postgres:123456@localhost:5432/python')
    
    index = ['number','price','product']
    data = np.random.random((3,3))
    columns = ['id','num','name']
    frame = pd.DataFrame(data,index,columns)
    frame.to_sql('new_student', engine)
    

    八 HDF5文件读写

    HDF5文件也就是等级数据库文件,处理分析大数据时会用到;

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    from pandas.io.pytables import  HDFStore
    
    index = ['number','price','product']
    data = np.random.random((3,3))
    columns = ['zszxz','craler','rose']
    frame = pd.DataFrame(data,index,columns)
    # 创建HDF5 文件
    hdf = HDFStore('../file/zszxz_w_05.h5')
    # 将 frame 存储进 HDF5文件
    hdf['object1'] = frame
    # 读取
    print(hdf['object1'])
    

    输出

                zszxz    craler      rose
    number   0.480612  0.473889  0.531245
    price    0.213813  0.153765  0.875458
    product  0.039371  0.989284  0.764272
    
  • 相关阅读:
    获得插入记录标识号, 鼠标移到DataGrid的行更改颜色(转)
    ESRI ArcGIS 9.0系列软件报价(转)
    世界电子地图
    Microsoft’s.NET MicroFramework初接触
    MapServer初体验成功
    MapScript C# Tutorial Programming MapServer in the ASP .NET Framework(转)
    WPF 中的Width 与 ActualWidth
    可空值类型
    面试时遇到上机编程题
    checked、unchecked
  • 原文地址:https://www.cnblogs.com/zszxz/p/12843132.html
Copyright © 2011-2022 走看看