zoukankan      html  css  js  c++  java
  • Python -- 数据加载、存储与文件格式

    标签(空格分隔): Python


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

    读写文本格式的数据

    pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,如下表所示:

    函数 说明
    read_csv 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为,
    read_table 从文件、URL、文件型对象中加载带分隔符的数据,默认的分隔符为制表符" "
    read_fwf 读取定宽列格式数据 -- 木有分隔符的
    read_clipboard 读取剪贴板中的数据,可以看做read_table的剪贴板。将网页转换为表格时很有用

    for example:

    In[]: import pandas as pd
    In[]: df = pd.read_csv('ex1.csv') # ''内写入文件所在的详细目录
    In[]: df = pd.read_table('ex1.csv', sep = ',') # 或者使用table并指定分隔符
    
    # 当你要读入的文件没有标题行时:
    In[]: df = pd.read_csv('ex2.csv', header = None) # 让pandas为其分配默认的列名
    In[]: df = pd.read_csv('ex2.csv', names = ['a','b','c','d','message']) # 自己定义标题行
    In [8]: names = ['a','b','c','d','message']
    
    # 让其中的某列作为列索引
    In [9]: pd.read_csv('ex2.csv', names = names, index_col = 'message')
    Out[9]: 
             a   b   c   d
    message               
    hello    1   2   3   4
    world    5   6   7   8
    foo      9  10  11  12
    In[]: pd.read_csv('ex4.csv', skiprows = [0, 2, 3]) # 略过第0,2,3行不读取
    
    # 用一个字典为各列指定不同的NA标记值
    In[]: patterns = {'message':['foo', 'NA'], 'something':['two']}
    In[]: pd.read_csv('ex5.csv', na_values=patterns)
    
    • read_csv/read_table函数的参数
    参数 说明
    path 表示文件系统位置、URL、文件型对象的字符串
    sep/delimiter 用于对行中各字段进行拆分的字符序列或正则表达式
    header 用作列名的行号。如果没有header行就应该设置为None
    index_col 用作行索引的列编号或列名,可以是单个名称/数字或由多个名称/数字组成的列表
    names 用于结果的列名列表,结合header = None
    skiprows 需要忽略的行数
    na_values 一组用于替换NA的值
    comment 用于将注释信息从行尾拆分出去的字符
    parse_dates 尝试将数据解析为日期
    nrows 需要读取的行数
    skip_footer 需要忽略的行数

    逐块读取文本文件

    In[]: pd.read_csv('ex6.csv', nrows=5)
    

    将数据写出到文本

    In[]: data = pd.read_csv('ex5.csv')
    In[]: data.to_csv('out.csv') # 将data中的数据写出到当前目录中的out.csv中
    In[]: data.to_csv(sys.stdout, sep='|') # 打印到屏幕
    In[]: data.to_csv(sys.stdout, na_rep='NULL') # 空字符处显示为NULL
    In[]: data.to_csv(sys.stdout, index=False, header=False) # 禁用行和列的标签
    In[]: data.to_csv(sys.stdout, index=False, cols=['a', 'b', 'c']) # 按照指定的顺序显示列
    
    # Series中的to_csv方法
    In [39]: dates = pd.date_range('1/1/2000', periods = 7)
    
    In [40]: dates
    Out[40]: 
    DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04', '2000-01-05', '2000-01-06', '2000-01-07'], dtype='datetime64[ns]', freq='D')
    In [45]: ts = Series(np.arange(7), index = dates)
    
    In [46]: ts
    Out[46]: 
    2000-01-01    0
    2000-01-02    1
    2000-01-03    2
    2000-01-04    3
    2000-01-05    4
    2000-01-06    5
    2000-01-07    6
    Freq: D, dtype: int64
    In [47]: ts.to_csv('tseries.csv')
    
    In [48]: cat tseries.csv
    2000-01-01,0
    2000-01-02,1
    2000-01-03,2
    2000-01-04,3
    2000-01-05,4
    2000-01-06,5
    2000-01-07,6
    
    In[]: Series.from_csv('tseries.csv',parse_dates = False) # 从文件中读入到Series
    

    手工处理分隔符

    In [50]: cat ex7.csv
    "a","b","c"
    "1","2","3"
    "1","2","3","4"
    
    In [51]: import csv
    In [52]: f = open('ex7.csv')
    In [53]: reader = csv.reader(f)
    In [54]: for line in reader:
        ...:     print line
        ...:     
    ['a', 'b', 'c']
    ['1', '2', '3']
    ['1', '2', '3', '4']
    
    # 可以对数据做一些处理
    In[]: lines = list(csv.reader(open('ex7.csv')))
    In[]: header, values = lines[0], lines[1:]
    In[]: data_dict = {h:v for h,v in zip(header, zip(*values))}
    
    • CSV语支选项
    参数 说明
    delimiter 用于分割字段的单字符字符串,默认为','
    lineterminator 用于写操作的行结束符,默认为' '。读操作将忽略此选项
    quotechar 用于带有特殊字符的字段的引用符号,默认为'"'

    JSON数据

    JSON(JavaScript Object Notation)已经成为通过HTTP请求在Web浏览器和其他应用程序之间发送数据的标准格式之一。

    import json
    In [65]: obj = """{"name":"Wes", "places_lived":["United States", "Spain", "Germany"], "pet":nu
    ...: ll, "siblings":[{"name":"Scott","age":25,"pet":"Zuko"},{"name":"Katy","age":33,"pet":"
    ...: Cisco"}]}"""
    In [68]: res = json.loads(obj) # 将JSON字符串转换为Python形式
    
    In [69]: res
    Out[69]: 
    {u'name': u'Wes',
     u'pet': None,
     u'places_lived': [u'United States', u'Spain', u'Germany'],
     u'siblings': [{u'age': 25, u'name': u'Scott', u'pet': u'Zuko'},
      {u'age': 33, u'name': u'Katy', u'pet': u'Cisco'}]}
      
    # 将Python转换为json
    In [71]: asjson = json.dumps(res) 
    In [72]: asjson
    Out[72]: '{"pet": null, "siblings": [{"pet": "Zuko", "age": 25, "name": "Scott"}, {"pet": "Cisco", "age": 33, "name": "Katy"}], "name": "Wes", "places_lived": ["United States", "Spain", "Germany"]}'
    
    In[]: data = DataFrame(res['siblings'], columns=['name', 'age'])
    In [75]: data
    Out[75]: 
        name  age
    0  Scott   25
    1   Katy   33
    

    使用HTML和Web API

    import requests
    In[]: url = 'http://www.baidu.com'
    In[]: resp = requests.get(url)
    In[]: import json
    In[]: data = json.loads(resp.text) # Response对象的text属性含有GET请求的内容,大多返回JSON对象,加载到Python对象中
    In[]: data.keys()
    

    使用数据库

    In[]: import sqlite3
    In[]: query = """create table test(a varchar(20), b varchar(20), c real, d integer);"""
    In[]: con = sqlite3.connect(':memory:') # 连接数据库
    In[]: con.execute(query)
    In[]: con.commit()
    
    In[]: data = [('Atlanta', 'Georgia', 1.25, 6), ('Tall', 'Flor', 2.6, 3), ('Saca', 'Calif', 1.7, 5)]
    In[]: stmt = "insert into test values(?, ?, ?, ?)"
    
    In[]: con.execute(stmt, data)
    In[]: con.commit()
    
    In[]: datas = con.execute('select * from test')
    In[]: lines = datas.fetchall() # 从表中读取数据,将返回一个元祖列表
    In[]: datas.description # 获得列名
    In[]: DataFrame(rows, columns=zip(*datas.description)[0])
    
    In[]: import pandas.io.sql as sql
    In[]: sql.read_frame('select * from test', con) # 传入sql语句和连接对象
  • 相关阅读:
    ASP.NET Core 中的配置
    依赖注入简介
    Authoriztion Code Flow
    建立IdentityServer项目
    OAuth2 OpenID Connect概述
    Asp.Net Core 项目运行部署到发布
    javascript Template tmpl
    webform ajax 异步请求
    hosts 文件
    webform 使用富文本编辑器
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/6222192.html
Copyright © 2011-2022 走看看