Pandas读取和保存数据
夏悠 人气:0pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。它是使Python成为强大而高效的数据分析环境的重要因素之一。
pandas的IO工具支持非常多的数据输入输出方式。包括csv、json、Excel、数据库等。
本文通过几个实例,介绍几种常用的数据加载方式,包括从csv文件、excel文件、关系型数据库如mysql、API接口加载json数据,来初步体验一下pandas加载数据的便捷性。
涉及对象:
csv, mysql, json, excel
主要函数:
- pd.read_csv()
- data.to_csv()
- pd.read_sql()
- data.to_sql()
- json.dump()
- json.loads()
- pd.read_excel()
- data.to_excel
做量化交易,总也离不开对数据的处理和分析,以下是我经常用到的一些读取和保存数据的函数。
特意抽时间整理了一下,分享给大家。
import pandas as pd # 解决数据输出时列名不对齐的问题 pd.set_option("display.unicode.east_asian_width", True) # 显示所有列,把行显示设置成最大 pd.set_option("display.max_columns", None) # 显示所有列 # 显示所有行,把列显示设置成最大 pd.set_option("display.max_rows", False) # 不显示所有行 pd.set_option('display.width', 200) # 设置显示的宽度 # 是否保存 # ---------------------------------------------------------------------------------------- store = False # 读取CSV文件 path = "O:/Database/futures_5m/ag8888_5m.csv" data_csv = pd.read_csv( path, # 字符串:文件路径或RRL链接 header="infer", # 指定作为列名的行。默认第一行。 不包含列名:header=None。 names=None, # 修改列的名称:参数为要使用的列名列表 index_col=None, # 指定列为索引列 usecols=None, # int、list [0, 1, 2, 3, 4] ['类型', '数量', '成交价'] 或字符串。None:所有列;int:最后一列。 dtype=None, # 字典:列的数据类型。 parse_dates=False, # 把某列解析为日期类型 nrows=None, # 需要读取的行数,int, default None, ) # 保存csv文件 # ---------------------------------------------------------------------------------------- path2 = "O:/Database/futures_5m/store_test.csv" if store: data_csv.to_csv( path2, # 绝对路径+文件名。或文件名 float_format="%.2f", # 格式化浮点数 columns=None, # 列表,写入文件的列,默认为None header=True, # 是否输出列名,默认True index=True, # 是否输出索引,默认True index_label=None, # 索引列的列名,列表,写入文件的列,默认为None chunksize=1000, # 一次写入.csv文件的行数。数据很多时,必须分批写入。 date_format=None, # 日期输出格式 ) # 数据库模块 import mysql.connector from sqlalchemy import create_engine # 创建MySQL数据库连接 """ connect = create_engine("数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库名称", 其他参数) """ # ---------------------------------------------------------------------------------------------------- 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, # 创建的连接对象 index_col="date", # 索引列:字符串或字符串列表,可选,默认值:无 coerce_float=True, # 将值强制转为浮点数:布尔值,默认为True params=None, # list、tuple或dict,可选,默认值:None。传递给execute方法的参数列表 parse_dates=None, # 解释为日期: 列的名称列表 或字典:{column_name: format string} columns=None, # 要从sql表中选择的列,仅在读取表格时使用 chunksize=None, # 读取的行数 ) # 保存SQL文件 # ---------------------------------------------------------------------------------------- if store: data.to_sql( name="store_test", # SQL输出的表名 con=connection, # 与read_sql中相同,数据库链接 index=False, # 是否将index作为单独的一列 index_label=None, # 指定列作为index输出,此时index为True chunksize=None, # 设置整数,如20000,一次写入数据时的数据行数量,当数据量很大时,需要设置,否则会链接超时写入失败 dtype=None, # 指定列的输出到数据库中的数据类型。字典形式储存:{column_name: sql_dtype}。 当不设置时,to_sql生成表时会自动兼容最大的类型 if_exists="append", ) # Fail 抛出错误; append 插入; replace 替换 # ---------------------------------------------------------------------------------------------------------------------- # 保存为json文件 # ---------------------------------------------------------------------------------------- import json # 把字典保存为json格式的文件 if store: with open('O:/我的回测/回测系统 重写数据模块/回测结果保存/把字典保存为json格式的文件.json', 'w') as f: # 存在中文必须设置ensure_ascii=False results = { "合约": "bu8888", "频率": "1m", "周期": 60, "本金": 50000, "收益": "-3506", "年化": "-44.51%", "期望": "-0.4R", "赔率": 0.82, "胜率": "33%", "次数": "6", "天数": 30, } # 将python中的对象转化成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:/我的回测/回测系统 重写数据模块/回测结果保存/把字典保存为json格式的文件.json', 'r') as f1: # 直接读取,返回字符串 da = f1.read() # 此时数值仍是字符串,需要进一步转换 # 转为字典格式 result = json.loads(da) # 转为字典格式 # 读取Excel文件 # ---------------------------------------------------------------------------------------- """ 注意坑:excel文件处于打开或编辑状态时,会读取出错和失败!! """ data_excel = pd.read_excel( 'H:/交易资料/Python文件/K线测试数据.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线测试数据', # 表的名称 index=False, # 是否保存索引
加载全部内容