pandas读写文本格式数据

 1、Pandas提供一些用于将表格型数据读取为DataFrame对象的函数

2、读写文本格式数据

制表符可以用来制作表格,它们在第9区。它们有:
┌ └ ┐ ┘ ─ │ ├ ┤ ┬ ┴ ┼
用它们可以制表(不用Excel),而且只要是宋体,在任何电脑上都可以观看。
不过如果是在网页里,就有点问题,这是因为行距在捣乱。
制表符都是全角(全角空格的16进制代码是3000)
┌─┬─┬─┬─┐
│ │ │ │ │
├─┼─┼─┼─┤
│ │ │ │ │
├─┼─┼─┼─┤
│ │ │ │ │
└─┴─┴─┴─┘
制表符

组合索引

手动处理分隔符格式

###数据读取
#读取文本格式数据
df = pd.read_csv('E:\week5\data/ex1.csv')
df

pd.read_table('d:data/ex1.csv', sep=',')#需要制定分割符  默认是制表符

pd.read_csv('d:data/ex2.csv', header=None) #第一行不是表头 会不读取第一行  而是一个从0开始的索引
pd.read_csv('d:data/ex2.csv', names=['a', 'b', 'c', 'd', 'message'])#指定列明

names = ['a', 'b', 'c', 'd', 'message']
pd.read_csv('d:data/ex2.csv', names=names, index_col='message')#行的索引是message这一列所给出来的值

parsed = pd.read_csv('d:data/csv_mindex.csv', index_col=['key1', 'key2'])#组合索引,将两个键组合起来作为唯一的键
parsed

list(open('E:\week5\data/ex3.txt'))
result = pd.read_table('d:data/ex3.txt', sep='\s+')#如果第一行少一个值,会把第一列作为行的索引
result

pd.read_csv('d:data/ex4.csv', skiprows=[0, 2, 3])#跳过0, 2, 3 行

#缺失值
result = pd.read_csv('E:\week5\data/ex5.csv')
result
pd.isnull(result)#看哪些位置有缺失值

result = pd.read_csv('d:data/ex5.csv', na_values=['NULL'])#指点该数据也为缺失值
result

sentinels = {'message': ['foo', 'NA'], 'something': ['two']} #在这些指定的地方添加缺失值
pd.read_csv('d:data/ex5.csv', na_values=sentinels)

#逐行读取文本文件
result = pd.read_csv('d:data/ex6.csv')
result
pd.read_csv('d:data/ex6.csv', nrows=5)#指定读取前五行
chunker = pd.read_csv('d:data/ex6.csv', chunksize=1000)#每次读取多少行,对文件迭代的处理
chunker

chunker = pd.read_csv('d:data/ex6.csv', chunksize=1000)

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

tot = tot.order(ascending=False)

tot[:10]

#文件写出
data = pd.read_csv('d:data/ex5.csv')
data
data.to_csv('d:data/out.csv')#将文件输出到哪

data.to_csv(sys.stdout, sep='|')#指定分隔符, 只是打印输出结果,并不会保存

data.to_csv(sys.stdout, na_rep='NULL')#指定缺失值的显示

data.to_csv(sys.stdout, index=False, header=False) #去掉行列标签

data.to_csv(sys.stdout, index=False, columns=['a', 'b', 'c'])#指定写出的列

dates = pd.date_range('1/1/2000', periods=7)
ts = Series(np.arange(7), index=dates)
ts.to_csv('tseries.csv')

Series.from_csv('tseries.csv', parse_dates=True)

#手工处理分隔符格式
import csv
f = open('d:data/ex7.csv')

reader = csv.reader(f)

for line in reader:
    print(line)

lines = list(csv.reader(open('d:data/ex7.csv')))
header, values = lines[0], lines[1:]
data_dict = {h: v for h, v in zip(header, zip(*values))}
data_dict

class my_dialect(csv.Dialect):
    lineterminator = '\n'#换行符
    delimiter = ';'#分隔符
    quotechar = '"'#字符串之间的引用
    quoting = csv.QUOTE_MINIMAL

with open('mydata.csv', 'w') as f:
    writer = csv.writer(f, dialect=my_dialect)#把格式写入进去
    writer.writerow(('one', 'two', 'three'))
    writer.writerow(('1', '2', '3'))
    writer.writerow(('4', '5', '6'))
    writer.writerow(('7', '8', '9'))
pd.read_table('mydata.csv', sep=';')
数据读取

 

读取Excel文件

处理Excel的基本库:xlrd :将Excel文件读取出来        xlwt 将python 文件写入到Excel 里面

#Excel数据
#生成xls工作薄
import xlrd, xlwt
path = 'd:data/'

wb = xlwt.Workbook()#创建工作簿
wb

wb.add_sheet('first_sheet', cell_overwrite_ok=True)#增加工作表
wb.get_active_sheet()

ws_1 = wb.get_sheet(0)#给第0个工作表一个索引名称
ws_1

ws_2 = wb.add_sheet('second_sheet')#添加工作表并赋值

data = np.arange(1, 65).reshape((8, 8))
data

ws_1.write(0, 0, 100)#第一行第一列写入100

for c in range(data.shape[0]):
    for r in range(data.shape[1]):
        ws_1.write(r, c, data[c, r])
        ws_2.write(r, c, data[r, c])

wb.save(path + 'workbook.xls')#保存

#生成xlsx工作薄    最新版07版以后的

#从工作薄中读取
book = xlrd.open_workbook(path + 'workbook.xls')
book# 不能看见内容,因为内容是放在工作表中的

book.sheet_names()#获取工作表的名称

sheet_1 = book.sheet_by_name('first_sheet')#通过名称获取工作表
sheet_2 = book.sheet_by_index(1)#通过索引获取工作表
sheet_1
sheet_2.name

sheet_1.ncols, sheet_1.nrows#工作表的行数和列数

cl = sheet_1.cell(0, 0)
cl.value #第一行第一列单元格的值

cl.ctype#单元格的类型

sheet_2.row(3) #访问第四行

sheet_2.col(3) #访问第四列

sheet_1.col_values(3, start_rowx=3, end_rowx=7) #第四列 第三行到第7行

sheet_1.row_values(3, start_colx=3, end_colx=7)

for c in range(sheet_1.ncols):
    for r in range(sheet_1.nrows):
        print '%i' % sheet_1.cell(r, c).value,
    print

#使用pandas读取
xls_file=pd.ExcelFile(path + 'workbook.xls')
table=xls_file.parse('first_sheet')


#JSON数据

obj = """
{"name": "Wes",
 "places_lived": ["United States", "Spain", "Germany"],
 "pet": null,
 "siblings": [{"name": "Scott", "age": 25, "pet": "Zuko"},
              {"name": "Katie", "age": 33, "pet": "Cisco"}]
}
"""

import json
result = json.loads(obj)
result

asjson = json.dumps(result)

siblings = DataFrame(result['siblings'], columns=['name', 'age'])
siblings


#二进制数据格式
#pickle
frame = pd.read_csv('d:data/ex1.csv')
frame
frame.to_pickle('d:data/frame_pickle')#转换成pickle的二进制模式

pd.read_pickle('d:data/frame_pickle')#打开pickle

#HDF5格式
store = pd.HDFStore('mydata.h5')
store['obj1'] = frame
store['obj1_col'] = frame['a']
store

store['obj1']

store.close()
os.remove('mydata.h5')

#使用HTML和Web API
import requests
url = 'https://api.github.com/repos/pydata/pandas/milestones/28/labels'
resp = requests.get(url)
resp

data=json.loads(resp.text)

issue_labels = DataFrame(data)
issue_labels


#使用数据库
import sqlite3 #获取数据库的包

query = """
CREATE TABLE test
(a VARCHAR(20), b VARCHAR(20),
 c REAL,        d INTEGER
);"""

con = sqlite3.connect(':memory:')
con.execute(query)
con.commit()

data = [('Atlanta', 'Georgia', 1.25, 6),
        ('Tallahassee', 'Florida', 2.6, 3),
        ('Sacramento', 'California', 1.7, 5)]
stmt = "INSERT INTO test VALUES(?, ?, ?, ?)"

con.executemany(stmt, data)
con.commit()

cursor = con.execute('select * from test')
rows = cursor.fetchall()
rows

cursor.description

DataFrame(rows, columns=zip(*cursor.description)[0])

import pandas.io.sql as sql #查询数据库中内容
sql.read_sql('select * from test', con)
Excel和数据库

 

posted @ 2016-08-10 00:20  若时光搁浅  阅读(1344)  评论(0)    收藏  举报