69.CSV檔案
pandas的DataFrame和Series對象提供了直接儲存csv檔案格式的方法,通過參數設定,輕松将資料内容儲存在本地磁盤。
常用參數說明:
path_or_buf: csv檔案存放路徑或者StringIO對象
sep : 檔案内容分隔符,預設為,逗号
na_rep: 在遇到NaN值時儲存為某字元,預設為’‘空字元
float_format: float類型的格式
columns: 需要儲存的列,預設為None
header: 是否儲存columns名,預設為True
index: 是否儲存index,預設為True
mode : 建立新檔案還是追加到現有檔案,預設為建立
encoding: 檔案編碼格式
date_format: 日期格式
注:在設定path時,如果目錄不存在,程式會提示IOError,請先確定目錄已經存在于磁盤中。
調用方法:
import tushare as ts
df = ts.get_hist_data('000875')
#直接儲存
df.to_csv('c:/day/000875.csv')
#選擇儲存
df.to_csv('c:/day/000875.csv',columns=['open','high','low','close'])
追加資料的方式:
某些時候,可能需要将一些同類資料儲存在一個大檔案中,這時候就需要将資料追加在同一個檔案裡,簡單舉例如下:
import tushare as ts
import os
filename = 'c:/day/bigfile.csv'
for code in ['000875', '600848', '000981']:
df =
ts.get_hist_data(code)
if
os.path.exists(filename):
df.to_csv(filename, mode='a', header=None)
else:
df.to_csv(filename)
【注:如果是不考慮header,直接df.to_csv(filename,
mode=’a’)即可,否則,每次循環都會把columns名稱也append進去】
70.Excel檔案
pandas将資料儲存為MicroSoft Excel檔案格式。
常用參數說明:
excel_writer: 檔案路徑或者ExcelWriter對象
sheet_name:sheet名稱,預設為Sheet1
sep : 檔案内容分隔符,預設為,逗号
na_rep: 在遇到NaN值時儲存為某字元,預設為’‘空字元
float_format: float類型的格式
columns: 需要儲存的列,預設為None
header: 是否儲存columns名,預設為True
index: 是否儲存index,預設為True
encoding: 檔案編碼格式
startrow: 在資料的頭部留出startrow行空行
startcol :在資料的左邊留出startcol列空列
調用方法:
import tushare as ts
df = ts.get_hist_data('000875')
#直接儲存
df.to_excel('c:/day/000875.xlsx')
#設定資料位置(從第3行,第6列開始插入資料)
df.to_excel('c:/day/000875.xlsx', startrow=2,startcol=5)
71.HDF5檔案
pandas利用PyTables包将資料儲存為HDF5格式的檔案。需要确認的是,運作時PyTables包的版本需要
>=3.0.0。
常用參數說明:
path_or_buf: 檔案路徑或者HDFStore對象
key:HDF5中的group辨別
mode : 包括 {‘a’追加, ‘w’寫入, ‘r’隻讀, ‘r+’等同于a但檔案必須已經存在}, 預設是
‘a’
format:‘fixed(f)|table(t)’,預設‘fixed’,f适合快速讀寫,不能追加資料
t适合從檔案中查找和選擇資料
append: 适用于table(t)模式追加資料,預設Flase
complevel: 壓縮級别1-9, 預設0
complib: 壓縮類型{‘zlib’, ‘bzip2’, ‘lzo’, ‘blosc’,
None}預設None
調用方法:
import tushare as ts
df = ts.get_hist_data('000875')
df.to_hdf('c:/day/hdf.h5','000875')
方法2:
import tushare as ts
df = ts.get_hist_data('000875')
store = HDFStore('c:/day/store.h5')
store['000875'] = df
store.close()
72.JSON檔案
pandas生成Json格式的檔案或字元串。
常用參數說明:
path_or_buf: json檔案存放路徑
orient:json格式順序,包括columns,records,index,split,values,預設為columns
force_ascii: 将字元轉ASCII,預設為True
調用方法:
import tushare as ts
df = ts.get_hist_data('000875')
df.to_json('c:/day/000875.json',orient='records')
#或者直接使用
print df.to_json(orient='records')
73.MySQL資料庫
pandas提供了将資料便捷存入關系型資料庫的方法,在新版的pandas中,主要是已sqlalchemy方式與資料建立連接配接,支援MySQL、Postgresql、Oracle、MS
SQLServer、SQLite等主流資料庫。本例以MySQL資料庫為代表,展示将擷取到的股票資料存入資料庫的方法,其他類型資料庫請參考sqlalchemy官網文檔的create_engine部分。
常用參數說明:
name:表名,pandas會自動建立表結構
con:資料庫連接配接,最好是用sqlalchemy建立engine的方式來替代con
flavor:資料庫類型 {‘sqlite’, ‘mysql’},
預設‘sqlite’,如果是engine此項可忽略
schema:指定資料庫的schema,預設即可
if_exists:如果表名已存在的處理方式 {‘fail’, ‘replace’,
‘append’},預設‘fail’
index:将pandas的Index作為一列存入資料庫,預設是True
index_label:Index的列名
chunksize:分批存入資料庫,預設是None,即一次性全部寫人資料庫
dtype:設定columns在資料庫裡的資料類型,預設是None
調用方法:
from sqlalchemy import create_engine
import tushare as ts
df = ts.get_tick_data('600848', date='2014-12-22')
engine =
create_engine('mysql://user:[email protected]/db_name?charset=utf8')
#存入資料庫
df.to_sql('tick_data',engine)
#追加資料到現有表
#df.to_sql('tick_data',engine,if_exists='append')
74.MongoDB
pandas目前沒有提供直接存入MongoDB的方法,不過依然很簡單,而且方式很多,使用者可根據自身的業務特點選擇存儲的結構方式。
使用方法:
import pymongo
import json
conn = pymongo.Connection('127.0.0.1', port=27017)
df = ts.get_tick_data('600848',date='2014-12-22')
conn.db.tickdata.insert(json.loads(df.to_json(orient='records')))