批量查询返回多个 DataFrame,如何统一合并和处理?

Pandas中DataFrame数据的常用操作(创建、转置、查询、排序、缺失、运算、合并、追加、修改、分组、压缩等) 1. 导包 In [1]: import numpy as np In [2]: import pandas as pd ... 阅读详情

一句话回答

批量查询返回多个 DataFrame 时,建议先将数据统一为“标的代码 + 交易时间 + 行情字段”的标准结构,再进行合并、排序和指标计算。这样可以避免不同标的数据互相混淆,也能减少重复编写处理逻辑。在量化开发中,可以通过 QuantDash Python SDK 批量获取历史 K 线,再使用 Pandas 完成数据结构标准化和后续计算。

为什么会有这个问题 / 传统做法有什么问题?

在量化选股或多标的回测中,经常需要同时获取几十只甚至几百只股票的历史行情。

例如,需要查询以下两只股票最近 20 根日 K 线:

  • 600519.SH
  • 000001.SZ

如果分别调用接口,每只股票会得到一个独立的 DataFrame。

这种结构本身没有问题,但后续处理会比较麻烦。

假设需要计算两只股票的 5 日收益率,最直接的方法是分别处理:

df_a["return_5d"] = df_a["close"].pct_change(5)
df_b["return_5d"] = df_b["close"].pct_change(5)

当股票数量增加到 100 只时,就需要重复执行相同的逻辑。

实际开发通常会使用循环处理,但又会遇到几个问题:

第一,不同 DataFrame 可能缺少统一的标的标识。

如果直接使用 pd.concat() 纵向拼接,合并后的数据可能无法区分来自哪只股票。

第二,交易时间可能没有对齐。

不同股票可能存在停牌、上市时间不同等情况,不能简单假设每个 DataFrame 的行数和日期都一致。

第三,字段类型可能不一致。

例如,某些价格列可能需要先转换为数值类型,才能参与收益率计算。

第四,合并后直接计算指标可能产生跨标的污染。

假设将两只股票的行情合并后直接调用 pct_change(),第二只股票的第一条数据可能会错误地引用第一只股票的最后一条价格。

因此,解决问题的关键不只是将多个 DataFrame 拼在一起,而是建立统一的数据处理结构。

一种比较实用的方案是:

批量获取数据 → 统一标的标识 → 验证字段 → 合并 DataFrame → 按标的分组计算。

分步骤解决:使用 QuantDash 进行实践

第 1 步:安装 SDK 并初始化客户端

首先安装 QuantDash Python SDK:

# 在终端执行:pip install quantdash

初始化客户端时,建议通过环境变量读取 API Key,避免将密钥直接写入代码。

import os
import pandas as pd
from quantdash import QuantDash

api_key = os.getenv("QUANTDASH_API_KEY")

if not api_key:
    raise RuntimeError(
        "请先设置 QUANTDASH_API_KEY 环境变量"
    )

qd = QuantDash(api_key=api_key)

后续使用这个客户端获取行情数据。

第 2 步:批量获取历史 K 线

本例使用 qd.klines.batch() 获取多只股票的日 K 线。

symbols = [
    "600519.SH",
    "000001.SZ",
]

try:
    batch_result = qd.klines.batch(
        symbols,
        period="1d",
        count=20,
        to_dataframe=True,
        show_progress=True,
    )
except Exception as exc:
    raise RuntimeError(
        "批量获取历史 K 线失败"
    ) from exc

if batch_result is None:
    raise ValueError("批量查询返回空结果")

print("返回对象类型:", type(batch_result))

这里使用了四个关键参数:

  • symbols:需要查询的标的代码列表。
  • period=“1d”:查询日 K 线。
  • count=20:请求最近 20 根 K 线。
  • to_dataframe=True:请求使用 DataFrame 相关的返回形式。
  • show_progress=True:启用批量查询进度展示。

需要特别说明:to_dataframe=True 不应被理解为批量接口一定返回单个 DataFrame,也不能直接认定返回的是字典或列表。

批量返回对象的具体组织方式需要根据当前 SDK 版本和实际返回结果确认。

如果返回的是多个 DataFrame,后续就需要建立统一的处理方式。

第 3 步:将多个 DataFrame 统一为标准结构

为了让后续代码不依赖具体接口结构,可以先编写一个标准化函数。

本例约定,标准化后的 DataFrame 包含:

  • symbol:标的代码。
  • trade_time:交易时间。
  • close:收盘价格。

其中,close 和交易时间字段的实际名称需要先检查。下面的 close 仅作为配置示例,不代表对 SDK 返回字段的保证。

先实现单个 DataFrame 的标准化。

def normalize_kline(
    symbol,
    frame,
    time_column,
    close_column,
):
    if not isinstance(frame, pd.DataFrame):
        raise TypeError(
            f"{symbol} 的数据不是 DataFrame"
        )

    if frame.empty:
        raise ValueError(
            f"{symbol} 的行情数据为空"
        )

    required = [time_column, close_column]

    missing = [
        col for col in required
        if col not in frame.columns
    ]

    if missing:
        raise ValueError(
            f"{symbol} 缺少字段:{missing}"
        )

    result = frame[
        [time_column, close_column]
    ].copy()

    result = result.rename(
        columns={
            time_column: "trade_time",
            close_column: "close",
        }
    )

    result["symbol"] = symbol

    result["trade_time"] = pd.to_datetime(
        result["trade_time"],
        errors="coerce",
    )

    result["close"] = pd.to_numeric(
        result["close"],
        errors="coerce",
    )

    if result["trade_time"].isna().any():
        raise ValueError(
            f"{symbol} 存在无效交易时间"
        )

    if (
        result["close"].isna().any()
        or not result["close"].gt(0).all()
    ):
        raise ValueError(
            f"{symbol} 存在无效收盘价格"
        )

    result = result.sort_values(
        "trade_time"
    )

    if result["trade_time"].duplicated().any():
        raise ValueError(
            f"{symbol} 存在重复交易时间"
        )

    return result[
        ["symbol", "trade_time", "close"]
    ].reset_index(drop=True)

这段函数并不依赖 QuantDash 的具体返回容器,只负责处理已经确认归属某个标的的 DataFrame。

如果实际批量返回结果经过检查后,确认是以标的代码为键、DataFrame 为值的字典,可以这样调用:

if not isinstance(batch_result, dict):
    raise TypeError(
        "当前示例要求返回结果为标的字典;"
        "请检查实际结构后调整适配逻辑"
    )

time_column = "time"
close_column = "close"

# 上述字段名是配置示例,必须根据实际列名修改。
normalized_frames = []

for symbol in symbols:
    frame = batch_result.get(symbol)

    if frame is None:
        raise ValueError(
            f"{symbol} 没有对应的查询结果"
        )

    normalized = normalize_kline(
        symbol=symbol,
        frame=frame,
        time_column=time_column,
        close_column=close_column,
    )

    normalized_frames.append(normalized)

merged_df = pd.concat(
    normalized_frames,
    ignore_index=True,
)

merged_df = merged_df.sort_values(
    ["symbol", "trade_time"]
).reset_index(drop=True)

print(merged_df.head())

这里的 time_column=“time” 和 close_column=“close” 是需要根据实际结果确认的配置项。如果返回的是列表或其他结构,应先按实际接口约定建立标的与 DataFrame 的对应关系,再调用标准化函数。

不要在没有确认顺序契约的情况下,直接使用 zip(symbols, batch_result) 假定列表顺序与请求顺序一致。

完成上述步骤后,数据就统一成了长表结构。

长表的优势是每一行都有明确的标的代码和交易时间,非常适合后续分组处理。

第 4 步:统一计算多只股票的收益率

当所有数据都具备统一结构后,就不需要分别为每只股票编写计算代码。

例如,计算每只股票的 5 个交易观测间隔的收盘价收益率:

merged_df["return_5d"] = (
    merged_df
    .groupby("symbol")["close"]
    .pct_change(5)
)

result = merged_df[
    [
        "symbol",
        "trade_time",
        "close",
        "return_5d",
    ]
]

print(result.tail(10))

计算公式为:

5 期价格收益率 = 当前收盘价 / 5 期前收盘价 - 1

这里特别需要注意 groupby(“symbol”)。

如果没有分组,Pandas 会直接按照合并后的行顺序计算收益率,导致不同股票之间的价格相互引用。

另外,前 5 条记录没有足够的历史数据,结果为 NaN 是正常现象。

如果某只股票存在停牌或行情缺口,5 个观测间隔不一定严格对应完整的 5 个市场交易日,实际应用还需要结合交易日历验证。

这一计算得到的是指定收盘价序列的价格变化率,不能直接视为包含现金分红、交易费用等因素的真实持仓收益。

关键坑与注意事项

  • 不要假设批量接口只有一种返回结构。 不同接口或版本可能存在组织形式差异,应该先检查返回对象类型,再决定如何提取 DataFrame。

  • 合并前必须保留标的代码。 如果拼接后丢失标的标识,后续很难可靠地恢复每条行情的来源。

  • 不要直接对合并后的价格列计算收益率。 涉及价格变化、均线、动量等指标时,应按标的分组。

  • 时间字段必须明确。 不同数据可能使用交易日期、时间戳或索引表示时间,标准化时应以实际返回结构为准。

  • 批量请求需要检查缺失标的。 接口调用没有抛异常,不等于请求的每只股票都有有效行情。

  • 合并前应统一价格口径。 如果不同标的使用了不同复权方式,指标的可比性可能受到影响。涉及历史复权数据时,应明确记录实际使用的复权参数。

  • 保留数据处理过程的版本信息。 如果需要重复执行历史研究,建议记录查询范围、SDK 版本、字段映射和数据获取时间,降低历史数据修订对研究可复现性的影响。

常见问题(FAQ)

Q:多个 DataFrame 一定要先合并吗?

A:不一定。如果每只股票的计算逻辑完全独立,可以先分别处理,再合并结果。但如果需要统一筛选、统计或跨标的比较,标准化后的长表通常更方便。

Q:为什么不直接使用 pd.concat()?

A:pd.concat() 只负责拼接,不会自动解决标的归属、时间字段、价格类型和数据口径等问题。建议验证后再拼接。

Q:应该使用长表还是宽表?

A:长表适合分组计算和数据质量检查。宽表适合不同股票在同一日期上的横向比较,例如相关性计算。两者可以根据业务需要相互转换。

Q:批量查询结果里某只股票为空怎么办?

A:应记录对应标的,并根据业务要求选择终止任务、跳过标的或单独重试。不能直接把空数据解释为股票没有交易。

Q:QuantDash 会自动完成 DataFrame 合并和指标计算吗?

A:本文使用 QuantDash 获取行情数据,DataFrame 结构适配、拼接、字段验证以及收益率计算均由示例中的 Pandas 代码完成,不能视为 SDK 自动提供的能力。

小结

批量查询返回多个 DataFrame,并不是一个单纯的数据拼接问题。真正需要解决的是不同标的之间的数据组织、字段一致性、时间排序和分组计算问题。只有先建立统一的数据结构,后续指标计算才不容易出现跨标的污染。

在数据接入层,可以通过 QuantDash Python SDK 获取批量历史 K 线,减少业务代码中重复编写行情查询逻辑。至于数据结构标准化、异常检查、指标计算和研究数据版本管理,仍然需要工程系统自行完成。

对于多标的量化研究,推荐优先建立标准化的长表结构,并将标的标识、交易时间和字段验证作为固定处理环节。这能够为后续因子研究和策略回测提供更可靠的数据基础。

参考

QuantDash Python SDK 文档:https://docs.quantdash.net/zh-Hans/sdk/python-quickstart

机器学习数据预处理:JSON与SQL数据转DataFrame实战 在机器学习工程实践中,数据预处理是建模前至关重要的一环。面对嵌套JSON、数据库表等异构数据源,如何高效完成抽取与结构化转换,直接影响特征工程的质量与效率。借助Python的pandas库与SQL查询,可以将接口响应和关系型数据库中的原始记录标准化为DataFrame宽表,为后续训练提供干净、统一的数据输入。无论是处理API返回的复杂JSON结构,还是通过SQL聚合多表生成统计特征,掌握这些数据接入技术都能显著缩短从原始数据到可用训练集的距离。本文围绕JSON展开、SQL查询、多源合并与数据校验等操作,给出 阅读详情

相关推荐

Pandas的构造、增删改查、时间序列索引及合并DataFrame

Pandas基础,增删改查,时间序列,DataFrame合并

lizhyangmm的博客 1041

【数据处理包Pandas】DataFrame对象的合并

本文讲解数据处理包Pandas,围绕DataFrame对象的合并,包括concat、append、merge和join四种方法。

Morse_Chen的博客 6221

【python】两个结构完全相同的dataframe如何纵向合并

摘要: 本文介绍了如何使用Pandas合并多个结构相同的DataFrame,适用于分页数据、多文件读取等场景。核心方法是pd.concat(),重点讲解了其参数设置(如ignore_index=True避免索引重复)和常见问题处理(列不一致、数据类型冲突)。文章对比了concat与已弃用的append方法差异,并提供了批量合并、分块读取大文件等进阶技巧。最后总结数据处理原则:结构相同用concat,结构不同用merge/join,帮助读者高效完成数据整合工作。

每日出拳老爷子的博客 662

dataframe两个表合并_python合并多个EXCEL表

要想在某个领域做的好,先要知道最好的人做成了什么样,没有这个见识就很难进步。一背景在日常工作中经常回用到数据分析与统计工作,而在实施数据分析之前,最为最要的就是数据的搜集、整理工作。这里介绍一下多个相同格式的excel合并的处理。如果在excel文件表比较少时,手工合并还可以应付,当几十个几百个甚至更多的表时,手工合并效率会非常低,于是让计算机自动合并处理,帮助我们完成工作就显得非常有必...

weixin_39946266的博客 464

JOOQ用法和实例

jOOQ,是一个ORM框架,利用其生成的Java代码和流畅的API,可以快速构建有类型约束的安全的SQL语句。jOOQ的核心优势是可以将数据库表结构映射为Java类,包含表的基本描述和所有表字段。通过jOOQ提供的API,配合生成的Java代码,可以很方便的进行数据库操作生成的Java代码字段类型是根据数据库映射成的Java类型,在进行设置和查询操作时,因为是Java代码,都会有强类型校验,所以对于数据的输入,是天然安全的,极大的减少了SQL注入的风险。

m0_67403076的博客 1377

openEuler服务器离线安装实战:从Docker到Samba的完整避坑指南

本文提供了一份详尽的openEuler服务器离线部署实战指南,重点解决了在无网络环境下安装Docker、Samba等软件的依赖难题。文章深入对比了`dnf install`、`rpm`直接安装及禁用仓库安装三种核心方法,并分享了构建本地DNF仓库的进阶策略,旨在帮助运维人员构建高效可靠的离线部署工作流。

weixin_29210759的博客 72

spark dataframe操作集锦(提取前几行,合并,入库等)

spark dataframe派生于RDD类,但是提供了非常强大的数据操作功能。当然主要对类SQL的支持。 在实际工作中会遇到这样的情况,主要是会进行两个数据集的筛选、合并,重新入库。 首先加载数据集,然后在提取数据集的前几行过程中,才找到limit的函数。 而合并就用到union函数,重新入库,就是registerTemple注册成表,再进行写入到HIVE中。

大数据挖掘SparkExpert的博客 9万+

fragstats:景观指数趋势分析

优快云@_养乐多_本文将介绍景观指数时间序列的趋势分析,包括趋势类型、斜率、截距等。以及景观指数突变分析所用的软件和 python 代码。结果如下图所示,

养乐多的博客 2859

python dataframe合并相同行_pandas之DataFrame合并merge

一、mergemerge操作实现两个DataFrame之间的合并,类似于sql两个表之间的关联查询。merge的使用方法及参数解释如下:pd.merge(left, right, on=None, how='inner', left_on=None, right_on=None, left_index=False, right_index=False,sort=False, suffixes=('...

weixin_39715926的博客 4076

点云体积计算方法之一 附python代码

另外需要注意,这个只适合点云密集分布的场景来计算体积,比如树木扫描的体积;如果只是有表面积扫描的点云,该方法就不能计算整个物体的体积了。通过计算点云所占用的体素的数量来计算点云的近似体积。这是一个非常粗略的近似值,对于复杂的形状可能不准确。

三维点云技术探索 1888

【虚幻引擎UE】UE5 四步骤实现AI漫游与对话行为(含工程源码)

【虚幻引擎UE】UE5 四步骤实现AI漫游与对话行为(含工程源码)

灵境引路人 3227

【DS with Python】DataFrame的合并、分组聚合与数据透视表

包含内容:对于DataFrame的列合并df.merge() 行合并pd.concat(),与分组df.groupby()及分组后的聚合.agg() 转换.transform() 筛选 .filter 与apply()函数的应用,讲解数据尺度(Scale) 用pd.pivot_table()制作数据透视表,pandas中的时间Timestamp, Period, Datetimeindex, Periodindex,时间范围pd.date_range和resample函数

Mart_inn的博客 5709

华为OD机试真题 新系统2026-04-01 Python&JS【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 3223

pandas之DataFrame的级联、合并操作

今天讲的是pandas之DataFrame的级联、合并操作。 1、级联操作(就是将多个DataFrame进行横向或者纵向的拼接): pd.concat() pd.append() pandas使用pd.concat函数,这个与np.concatenate函数类似,只是多了一些参数: objs axis=0 keys join='outer'/'inner':这个参数表示的是级联的方式,outer会将所有的项进行级联(忽略匹配和不匹配),而inner只会将匹配到的项级联到一起,不匹配的项不级联,

cyllalala123的博客 1808

SKILL 是什么?怎么做?五分钟 带你从入门到精通

skill-creator 是 Anthropic 官方开源的“元技能”——一个专门用来创建 Skill 的 Skill。你只需要用自然语言描述想要什么功能,它会自动生成。从更宏观的视角看,Skills 的出现标志着 AI 编程的一次范式转变。在传统的 AI 编程中,代码是确定性的:1 是 1,2 是 2。但到了大模型时代,代码变得不确定——你不知道模型会输出什么,不知道它会不会突然删掉几行代码。这种不确定性让很多开发者感到不安。Skills 把这套逻辑又拉了回来。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 641

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

pandas一维系列Series和二维数据帧DataFrame的创建、索引、切片、查询、缺失值以及二维数据帧的分组、合并和聚合

pandas 一. Series一维数组 1. 创建一维数组 方法一: pd.Series(列表,index=列表,columns=列表) pd.Series(numpy一维数组,index=列表,columns=列表) 返回<class ‘pandas.core.series.Series’> 类型的一维数组 import pandas as pd t1 = pd.Series([8,6,3,4]) print(t1) t2 = pd.Series([1,2,3,4],index=list('

m0_47405013的博客 2101

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pandas合并excel的多个sheet

表格内容如下: 一共有6个表格,内容都差不多: 现在要做的是,把6个sheet合并成一个表格。 1.excel合并工作表 首先,探讨一下直接用excel来解决这个问题,在excel2016及以后的版本中,有一个强大的PowerQuery查询: 选择文件后: 点“编辑”以后,大概如下: 网上有些人的版本中有“将查询追加为新查询”这个功能,但是我的excel2016中没有这个选项,只能点击“追加查询"这个功能: 上图的意思是将sheet2追加到sheet1中去,...

qiuqiuit的专栏 7545

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

spark- Dataframe基本操作-查询

查询相关操作 .show() 显示头n 行 .printSchema() 打印表概要, .count() 查询统计表中数据行数 .distinct() 去重后的数据 .collect()获取所有数据到数组 .head(num) 以及.take(num) 获取前num行记录 .sample() 采样 .select() 选择列数据 .describe() 查看数据的统计分布

wangwangstone的博客 5803

高效处理DataFrame合并冲突:掌握suffixes参数的4个关键细节

掌握Pandas merge的suffixes参数,轻松解决列名冲突问题。适用于多表合并时保留同名列,灵活自定义后缀区分来源,提升数据清晰度与处理效率。4个关键细节解析助你精准操作,值得收藏。

LiteTrans的博客 937

如何实现一条sql查询返回多个数据库结果

有很多从事海外业务的公司,都不止上架一两个马甲包,而是会同时上架十几个甚至几十个产品,当我们在提取数据时,明明需要用到查询的sql是一样的,但每次都要一个一个数据库的查,这样十分耗费时间,这时可以选用python,写个通用查询脚本,一次性查询出所有内容并且整合到一起。 基本思路:1、将数据库连接封装到同一个类下; 2、查询时依次调用相应的数据库,返回结果合并到一个DataFrame中。 类的封装可以参考下面的代码(有些数据库是通过ssh连的,这里也给出案例): ...

lotus_lwy的博客 2843

PySpark︱DataFrame操作指南:增/删/改/查/合并/统计与数据处理

笔者最近需要使用pyspark进行数据整理,于是乎给自己整理一份使用指南。pyspark.dataframe跟pandas的差别还是挺大的。 1、——– 查 ——– — 1.1 行元素查询操作 — 像SQL那样打印列表前20元素 show函数内可用int类型指定要打印的行数: df.show() df.show(30) 以树的形式打印概要 df.prin...

素质云笔记 15万+

pandas模块之DataFrame按条件查询、合并、转换等操作

import pandas as pd import numpy as np //data_df为已有DataFrame //取出指定列 data_df["name1", "name2"] //提取某一列某个范围内的数据,可删除不在范围内的数据 data_df = data_df[data_df["risk"] >=0] data_df = data_df[data_df["risk"] >=0 & data_df["time"] <60] data_df = data_df[d

weixin_36488653的博客 2474

dataframe两个表合并_pandas ---处理非数值型的数据 DataFrame篇

1:DataFrame创建1:DataFrame创建:pd.DataFrame import numpy as np t=pd.DataFrame(np.arange(12).reshape((3,4)))2:DataFrame创建,并指定行列索引 t=pd.DataFrame(np.arange(12).reshape(3,4),index=list('abc'),column...

weixin_39723655的博客 629

pandas库--DataFrame常用操作

DataFrame的基本操作

bradyM的博客 1万+

dataframe 去重复_python 系列100条处理dataframe的语句

python 系列-100条处理dataframe的语句#数据集处理、筛选import pandas as pdimport numpy as npdates = pd.date_range('1/1/2000', periods=8)# 建立一个时间序列,从20000101开始,8个数据df = pd.DataFrame(np.random.randn(8, 4),index=date...

weixin_35949256的博客 125
上一篇: 港股策略研究的数据边界与行情校验:以 00700.HK 为例
下一篇: Python 行情筛选如何避免把缺失价格当作零?从 K 线数据清洗开始
quantdash_cc
博客等级 码龄105天 38粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值