You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从两个独立文件取数为pandas DataFrame追加新行

配对特征标签文件构建DataFrame修复方案

原有代码问题

  • 无文件配对逻辑:遍历过程中单独处理xlsx和csv文件,未将同组的特征、标签文件做关联,直接给DataFrame列赋值会导致全表数据被覆盖,出现数据错乱
  • 赋值逻辑错误:初始创建的模板DataFrame只有1行占位数据,循环中没有按组做行追加,反复覆盖列值会导致结构损坏
  • 路径读取错误:os.listdir仅返回文件名,未拼接文件夹完整路径,直接传入读取方法会触发文件不存在报错
  • 字段取值错误:重复给consolidating列赋值,标签文件列名、取值索引不匹配,无法正确读取目标字段

正确实现代码

核心思路是先按文件类型分组,通过文件名的共同前缀做配对匹配,逐组读取两个文件的字段拼接为完整行,最后一次性生成目标DataFrame,避免循环中反复修改DataFrame结构。

import os
import pandas as pd

# 替换为你的文件存放目录路径
DATA_DIR = "path/to/your/files"
# 目标表列配置
TARGET_COLS = ["periods","opens","highs","lows","closes","volumes","consolidating", "5D Perf"]

# 收集目录下所有特征、标签文件,以文件共同前缀作为配对键
file_collect = {"features": dict(), "labels": dict()}
for fname in os.listdir(DATA_DIR):
    full_path = os.path.join(DATA_DIR, fname)
    # 跳过子文件夹,仅处理文件
    if not os.path.isfile(full_path):
        continue
    if "features.xlsx" in fname:
        # 提取配对键:去掉特征文件固定后缀,剩余部分作为同组匹配标识
        pair_key = fname.replace("_features.xlsx", "")
        file_collect["features"][pair_key] = full_path
    elif "labels.csv" in fname:
        pair_key = fname.replace("_labels.csv", "")
        file_collect["labels"][pair_key] = full_path

# 筛选同时存在特征、标签的有效配对组
valid_pairs = file_collect["features"].keys() & file_collect["labels"].keys()
if not valid_pairs:
    raise RuntimeError("目录下未找到可匹配的特征、标签文件对")

# 逐组读取数据拼接
rows = []
for key in valid_pairs:
    # 读取特征文件字段
    feat_df = pd.read_excel(file_collect["features"][key])
    periods_val = feat_df.shape[0] - 1
    opens_val = feat_df["Open"].tolist()
    highs_val = feat_df["High"].tolist()
    lows_val = feat_df["Low"].tolist()
    closes_val = feat_df["Close"].tolist()
    volumes_val = feat_df["Volume"].tolist()

    # 读取标签文件字段
    label_df = pd.read_csv(file_collect["labels"][key])
    # 可根据标签文件实际存储位置调整iloc索引
    consolidating_val = label_df["Consolidating"].iloc[0]
    five_d_perf_val = label_df["5D Performance"].iloc[0]

    rows.append([
        periods_val, opens_val, highs_val, lows_val,
        closes_val, volumes_val, consolidating_val, five_d_perf_val
    ])

# 生成最终DataFrame
final_df = pd.DataFrame(rows, columns=TARGET_COLS)

适配调整说明

  • 如果你的文件命名规则不是前缀_features.xlsx/前缀_labels.csv格式,修改配对键提取逻辑即可,只要保证同组两个文件提取的pair_key完全一致即可正常配对
  • 如果标签文件内的字段存储行号和示例不同,调整iloc[]内的索引值即可(索引从0开始计数,0对应第一行)
  • 可增加如下代码排查缺失配对的文件:
# 排查缺失配对的文件
miss_feat = file_collect["labels"].keys() - file_collect["features"].keys()
miss_label = file_collect["features"].keys() - file_collect["labels"].keys()
if miss_feat:
    print(f"无对应特征文件的标签组:{miss_feat}")
if miss_label:
    print(f"无对应标签文件的特征组:{miss_label}")
  • 采用先存行列表最后一次性生成DataFrame的方式,比循环中逐行追加/修改DataFrame效率高5~10倍,也不会出现索引错位、列覆盖的问题

内容的提问来源于stack exchange,提问作者Dodo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:48:31