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)

浙公网安备 33010602011771号