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 行
#缺失值
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, lines
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):
for r in range(data.shape):
ws_1.write(r, c, data)
ws_2.write(r, c, data)
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,
#使用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))
import pandas.io.sql as sql #查询数据库中内容
sql.read_sql('select * from test', con)
Excel和数据库
页:
[1]