Pandas常用的讀取和保存數(shù)據(jù)的函數(shù)使用(csv,mysql,json,excel)
pandas 是基于NumPy 的一種工具,該工具是為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas 納入了大量庫和一些標準的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。Pandas的名稱來自于面板數(shù)據(jù)(panel data)和python數(shù)據(jù)分析(data analysis)。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。它是使Python成為強大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。
pandas的IO工具支持非常多的數(shù)據(jù)輸入輸出方式。包括csv、json、Excel、數(shù)據(jù)庫等。
本文通過幾個實例,介紹幾種常用的數(shù)據(jù)加載方式,包括從csv文件、excel文件、關(guān)系型數(shù)據(jù)庫如mysql、API接口加載json數(shù)據(jù),來初步體驗一下pandas加載數(shù)據(jù)的便捷性。
涉及對象:
csv, mysql, json, excel
主要函數(shù):
- pd.read_csv()
- data.to_csv()
- pd.read_sql()
- data.to_sql()
- json.dump()
- json.loads()
- pd.read_excel()
- data.to_excel
做量化交易,總也離不開對數(shù)據(jù)的處理和分析,以下是我經(jīng)常用到的一些讀取和保存數(shù)據(jù)的函數(shù)。
特意抽時間整理了一下,分享給大家。
import pandas as pd # 解決數(shù)據(jù)輸出時列名不對齊的問題 pd.set_option("display.unicode.east_asian_width", True) # 顯示所有列,把行顯示設(shè)置成最大 pd.set_option("display.max_columns", None) ?# 顯示所有列 # 顯示所有行,把列顯示設(shè)置成最大 pd.set_option("display.max_rows", False) ?# 不顯示所有行 pd.set_option('display.width', 200) ?# 設(shè)置顯示的寬度 # 是否保存 # ---------------------------------------------------------------------------------------- store = False # 讀取CSV文件 path = "O:/Database/futures_5m/ag8888_5m.csv" data_csv = pd.read_csv( ? ? path, ?# 字符串:文件路徑或RRL鏈接 ? ? header="infer", ?# 指定作為列名的行。默認第一行。 不包含列名:header=None。 ? ? names=None, ?# 修改列的名稱:參數(shù)為要使用的列名列表 ? ? index_col=None, ?# 指定列為索引列 ? ? usecols=None, ?# int、list ?[0, 1, 2, 3, 4] ['類型', '數(shù)量', '成交價'] 或字符串。None:所有列;int:最后一列。 ? ? dtype=None, ?# 字典:列的數(shù)據(jù)類型。 ? ? parse_dates=False, ?# 把某列解析為日期類型 ? ? nrows=None, ?# 需要讀取的行數(shù),int, default None, ) # 保存csv文件 # ---------------------------------------------------------------------------------------- path2 = "O:/Database/futures_5m/store_test.csv" if store: ? ? data_csv.to_csv( ? ? ? ? path2, ?# 絕對路徑+文件名?;蛭募? ? ? ? ? float_format="%.2f", ?# 格式化浮點數(shù) ? ? ? ? columns=None, ?# 列表,寫入文件的列,默認為None ? ? ? ? header=True, ?# 是否輸出列名,默認True ? ? ? ? index=True, ?# 是否輸出索引,默認True ? ? ? ? index_label=None, ?# 索引列的列名,列表,寫入文件的列,默認為None ? ? ? ? chunksize=1000, ?# 一次寫入.csv文件的行數(shù)。數(shù)據(jù)很多時,必須分批寫入。 ? ? ? ? date_format=None, ?# 日期輸出格式 ? ? ) # 數(shù)據(jù)庫模塊 import mysql.connector from sqlalchemy import create_engine # 創(chuàng)建MySQL數(shù)據(jù)庫連接 """ connect = create_engine("數(shù)據(jù)庫類型+數(shù)據(jù)庫驅(qū)動://數(shù)據(jù)庫用戶名:數(shù)據(jù)庫密碼@IP地址:端口/數(shù)據(jù)庫名稱", 其他參數(shù)) """ # ---------------------------------------------------------------------------------------------------- connect = create_engine("mysql+mysqlconnector://root:@localhost:3306/test") # 讀取SQL文件 # ---------------------------------------------------------------------------------------- # 查詢語句 sql_query = "SELECT * FROM data2" data_sql = pd.read_sql( ? ? sql_query, ?# SQL查詢語句:字符串格式 或 SQLAlchemy ? ? con=connect, ?# 創(chuàng)建的連接對象 ? ? index_col="date", ?# 索引列:字符串或字符串列表,可選,默認值:無 ? ? coerce_float=True, ?# 將值強制轉(zhuǎn)為浮點數(shù):布爾值,默認為True ? ? params=None, ?# list、tuple或dict,可選,默認值:None。傳遞給execute方法的參數(shù)列表 ? ? parse_dates=None, ?# 解釋為日期: 列的名稱列表 或字典:{column_name: format string} ? ? columns=None, ?# 要從sql表中選擇的列,僅在讀取表格時使用 ? ? chunksize=None, ?# 讀取的行數(shù) ) # 保存SQL文件 # ---------------------------------------------------------------------------------------- if store: ? ? data.to_sql( ? ? ? ? name="store_test", ?# SQL輸出的表名 ? ? ? ? con=connection, ?# 與read_sql中相同,數(shù)據(jù)庫鏈接 ? ? ? ? index=False, ?# 是否將index作為單獨的一列 ? ? ? ? index_label=None, ?# 指定列作為index輸出,此時index為True ? ? ? ? chunksize=None, ?# 設(shè)置整數(shù),如20000,一次寫入數(shù)據(jù)時的數(shù)據(jù)行數(shù)量,當數(shù)據(jù)量很大時,需要設(shè)置,否則會鏈接超時寫入失敗 ? ? ? ? dtype=None, ?# 指定列的輸出到數(shù)據(jù)庫中的數(shù)據(jù)類型。字典形式儲存:{column_name: sql_dtype}。 當不設(shè)置時,to_sql生成表時會自動兼容最大的類型 ? ? ? ? if_exists="append", ? ? ) ?# Fail 拋出錯誤; append 插入; replace 替換 ? ? # ---------------------------------------------------------------------------------------------------------------------- # 保存為json文件 # ---------------------------------------------------------------------------------------- import json # 把字典保存為json格式的文件 if store: ? ? with open('O:/我的回測/回測系統(tǒng) 重寫數(shù)據(jù)模塊/回測結(jié)果保存/把字典保存為json格式的文件.json', 'w') as f: ? ? ? ? # 存在中文必須設(shè)置ensure_ascii=False ? ? ? ? results = { ? ? ? ? ? ? "合約": "bu8888", ? ? ? ? ? ? "頻率": "1m", ? ? ? ? ? ? "周期": 60, ? ? ? ? ? ? "本金": 50000, ? ? ? ? ? ? "收益": "-3506", ? ? ? ? ? ? "年化": "-44.51%", ? ? ? ? ? ? "期望": "-0.4R", ? ? ? ? ? ? "賠率": 0.82, ? ? ? ? ? ? "勝率": "33%", ? ? ? ? ? ? "次數(shù)": "6", ? ? ? ? ? ? "天數(shù)": 30, ? ? ? ? } ? ? ? ? # 將python中的對象轉(zhuǎn)化成json儲存到文件中 ? ? ? ? """ ----------------------------------------------------------------------------------- ? ? ? ? json.dump(obj=python對象,fp=write()方法的文件對象,indent=縮進等級, ? ? ? ? ? ? ? ? ? sort_keys=以鍵的順序排序,ensure_ascii=True:False輸出中文) ? ? ? ? ----------------------------------------------------------------------------------- ? """ ? ? ? ? json.dump(results, f, sort_keys=False, indent=4, ensure_ascii=False) # 讀取json格式的文件 # ---------------------------------------------------------------------------------------- with open('O:/我的回測/回測系統(tǒng) 重寫數(shù)據(jù)模塊/回測結(jié)果保存/把字典保存為json格式的文件.json', 'r') as f1: ? ? # 直接讀取,返回字符串 ? ? da = f1.read() ?# 此時數(shù)值仍是字符串,需要進一步轉(zhuǎn)換 ? ? # 轉(zhuǎn)為字典格式 ? ? result = json.loads(da) ?# 轉(zhuǎn)為字典格式 # 讀取Excel文件 # ---------------------------------------------------------------------------------------- """ 注意坑:excel文件處于打開或編輯狀態(tài)時,會讀取出錯和失?。?! """ data_excel = pd.read_excel( ? ? 'H:/交易資料/Python文件/K線測試數(shù)據(jù).xlsx', ?# 文件名或路徑 ? ? sheet_name=0, ?# 字符串或整型(或兩者的列表),表的名稱 ? ? header=0, ?# 整型或整型列表,或None,默認為0,None代表無列名。 ? ? names=None, ?# 字符串列表,自定義列名,默認為None。 ? ? index_col=None, ?# 整型或者整型列表 ? ? usecols=None, ?# 表示要讀取的列號或列名(列表)。None表示全部讀取。當為str時可以為“A,D,F:H”表示讀取A,D,F,G,H列。 ? ? engine=None, ?# 讀取excel時用到的引擎類型。 ) # ?保存Excel文件 # ?---------------------------------------------------------------------------------------- if store: ? ? data_excel.to_excel( ? ? ? ? 'H:/交易資料/Python文件/test.xlsx', ?# ?路徑或文件名 ? ? ? ? sheet_name='K線測試數(shù)據(jù)', ?# ?表的名稱 ? ? ? ? index=False, ?# ?是否保存索引
到此這篇關(guān)于Pandas常用的讀取和保存數(shù)據(jù)的函數(shù)使用(csv,mysql,json,excel)的文章就介紹到這了,更多相關(guān)Pandas讀取和保存數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?Pandas?修改表格數(shù)據(jù)類型?DataFrame?列的順序案例
這篇文章主要介紹了Python?Pandas?修改表格數(shù)據(jù)類型?DataFrame?列的順序案例,文章通過主題展開詳細的相關(guān)內(nèi)容,感興趣的小伙伴可以參考一下2022-08-08python實現(xiàn)網(wǎng)站微信登錄的示例代碼
這篇文章主要介紹了python實現(xiàn)網(wǎng)站微信登錄的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09Python?pandas中read_csv參數(shù)示例詳解
使用pandas做數(shù)據(jù)處理的第一步就是讀取數(shù)據(jù),數(shù)據(jù)源可以來自于各種地方,csv文件便是其中之一,下面這篇文章主要給大家介紹了關(guān)于Python?pandas中read_csv參數(shù)詳解的相關(guān)資料,需要的朋友可以參考下2023-01-01