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

文本格式

1.解析函数

解析函数 说明
read_csv 文件、URL、文件型对象—有分隔符的数据(默认,)
read_table 文件、URL、文件型对象—有分隔符的数据(默认\t)
read_fwf 读取定宽,无分隔符
read_clipboard 读取剪贴板(read_table)

​ 功能:索引,类型推断和数据转化,日期解析,迭代,不规整数据问题

​ 参数:

​ 自定义列名:names=[]

​ 列做索引:index_col='col_name'

​ 分隔符:sep='\s+'不固定空格数

read_csv/read_table 参数 说明
path 位置,URL,文件型对象
sep或delimiter 分隔符
header 列明行号,默认0,可选None
index_col 索引的列编号或列名
skiprows 忽略行数
na_values 替换NA的值
comment 注释从行尾分出去的字符
parse_dates 解析为日期,默认False,可指定列号列名
keep_date_col 连接多列解析日期
converters 列号列名与函数之间的映射关系组成的字典,<br />{foo:f},foo列执行f函数
dayfirst 日期
date_praser 日期
nrows 读取的行数目
iterator 返回TextParser,逐块读取
chunksize 文件块的大小
skip_footer 忽略的行数(从行尾)
verbose 打印解析器输出
encoding Unicode编码格式
squeeze 仅含一列时,返回Series
thousands 千分位分隔符

逐块读取:

​ 只读取几行:nrow=5,5行

​ 逐块:chunksize=, 读取:TextParser

chunker = pd.read_csv('a.csv',chunksize=1000)

tot = Series([])
for piece in chunker:
    tot = tot.add(piece['key'].value_counts(), fill_value=0)

写出to_csv:

​ 禁用:index=False

​ 仅部分列:cols=[]

​ 缺失值为空:na_rep='Null'

Series也有to_csv方法

​ 读取为Series:Series.from_csv()

手工处理分隔符格式:

import csv

f = open('a.csv')
reader = csv.reader(f)

for line in reader:
    print line  #元组形式
    
# 整理格式:dict
lines = list(reader)
header, values = lines[0],lines[:1]
data_dict = {h:v for h, v in zip(header, zip(*values))}

#传入子类
class my_dialect(csv.Dialect):
    lineterminator = '/n'
    delimier = ';'
    quotechar = ':'
reader = csv.reader(f,dialect=my_dialect)   #也可以关键字形式传入
csv语句选项 说明
delimiter 分隔符
lineterminator 行尾符号
quotechar 引用,带特殊字符的引用
quoting 引用,(多个可选值)
skipinitialspace 忽略分隔符后的空格
doublequote 引用符,True为双写
escapechar 对分隔符进行转义的字符(quoting)

手工输出分隔符文件csv.writer

with open('a.csv', 'w') as f:
    writer = csv.writer(f, dialect=my_dialect)
    writer.writerow(...)
    writer.writerow(...)

2.JSON

HTTP请求在Web和其他应用程序之间发送的数据标准格式之一

import json

# 载入或输出(dict),load和jump针对文件
result = json.loads(obj)

asjson = json.jumps(result)

# 转化为DataFrame
siblings = DataFrame(result['slibings'], columns=['name','age'])

3.HTML: lxml

from lxml.html import parse
from urllib2 import urlopen

# 获取 标签
parsed = parse(urlopen('http://funance.yahoo.com/q/op?s=AAPL+Options'))
doc = parsed.getroot()  #获取根节点

# 查询a标签
links = doc.findall('./a')

# 获取url、文本
lnk = links[28]
lnk.get('href')
lnk.text_content()

# 推导式形式:a标签的href
urls = [lnk.get('href') for lnk in doc.findall('./a')]

# 找出表格
tables = doc.findall('./table')
calls = table[9]
puts = table[13]

# 找出row的所有'td'子标签的text
def _upack(row, kind='td'):
    elts = row.findall('.//%s' % kind)
    return [val.text_content() for val in elts]


# 自动转化类型TextParser:部分列转换为浮点
from pands.io.parsers import TextParser
def parse_options_data(table):
    rows = table.findall('./tr')            # 每行tr标签行
    header = _unpack(row[0], kind='th')     # 标题行
    data = [_unpack(r) for r in rows[1:]]   # 内容
    return TextParser(data, names=header).get_chunk()

# 得到最终DataFrame
call_data = parse_options_data(calls)
put_data = parse_options_data(puts)

4.XML: lxml.objectify

常见的支持分层、嵌套、元数据的结构化数据格式

from lxml import objectify
path = '文件名'
parsed = objectify.parse(open(path))
root = parsed.getroot()

# 提取数据
data = []
skip_field = ['不需要','提取的','标签']
for elt in root.INDICATOR:          # 所有indicator标签
    for child in elt.children:      # 遍历所有indicator标签的子标签
        if child.tag in skip_field:
            continue
        el_data = {child.tag: child.pyval}  #pyval属性得到对应的数据值,text字符串
    data.append(el_data)

二进制

使用python内置的pickle序列化,仅使用短期存储

​ 存储:frame.save()

​ 读取:pd.load()

HDF5

高效读写磁盘上以二进制格式存储的科学数据,工业级库C库,有许多语言接口。每个HDF5都含有文件系统式的节点结构。分块读写,适合海量数据。

python中有两个接口:PyTablesh5py

pandas有类似字典的HDFStore类,通过PyTables存储,可像字典一样获取

store = pd.HDFStore('mydata.h5')    # 文件名
# 内容
store['obj1'] = frame
stroe['obj1_col1'] = frame['a']

Microsoft Excel

需要xlrd和openyxl包

# 创建实例
xls_file = pd.ExcelFile('data.xls')
# 读取sheet1
table = xls_file.parse('sheet1')

HTML和Web API: requests

import requests
import json
resp = request.get(url)         #url网址,get请求
data = json.loads(resp.text)    #text是内容,json加载
print(data.keys())

数据库

sqlite3

import sqlite3
query = """
CREATE TABLE test
(a VARCHAR(20), b VARCHAR(20),
c REAL,         d INTEGER
);"""
con = sqlite3.connect(':memory:')   #放在内存中
# conn=sqlite3.connect('urls.db') 链接数据库
con.execute(query)
con.commit()

# 查询,显示所有
cursor = con.execute('select * from test')
rows = cursor.fetchall()    #fetchone
# description属性
print(cursor.description)

简化:read_frame()函数

import pandas.io.sql as sql
# 只需要语句和链接对象
sql.read_frame('select * from test', con)

MongoDB(NoSQL):pymongo

import pymongo
con = pymongo.Connection('localhost', port=27017) # 默认端口进行连接
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容