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

如何将多CSV文件合并为含统一时间列的单DataFrame?

合并多CSV文件并构建统一时间轴的DataFrame方案

我完全get你的需求:要把一批CSV数据合并成一个统一的DataFrame,核心是要有覆盖所有文件时间范围的time列,同时每个文件的PriceUSD数据要对应保留(用文件名当列名)。结合你给出的现有代码逻辑,我整理了一套完整可行的实现方案:

核心思路拆解

  1. 先收集所有CSV里的time值,构建一个去重、排序后的基准时间序列——这就是最终统一的time列
  2. 对每个有PriceUSD列的CSV,只保留time和PriceUSD列,把PriceUSD重命名为对应文件名
  3. 把每个处理后的小DataFrame和基准时间序列做左连接,确保每个时间点都被保留,缺失数据自动补NaN
  4. 最后把所有对齐后的DataFrame合并成最终的大DataFrame

具体实现代码

import pandas as pd
import os

# 假设你的nombres是存储CSV文件名的列表,比如["btc.csv", "eth.csv", "sol.csv"]
nombres = ["your_file1.csv", "your_file2.csv", "your_file3.csv"]

# 第一步:收集所有时间点,构建基准时间轴
all_time_points = []
processed_price_dfs = []

for filename in nombres:
    # 先读整个文件检查是否有PriceUSD列
    temp_full_df = pd.read_csv(filename)
    if "PriceUSD" in temp_full_df.columns:
        # 只提取需要的两列,避免占用过多内存
        temp_price_df = temp_full_df[["time", "PriceUSD"]].copy()
        # 把PriceUSD列重命名为文件名(去掉.csv后缀更清爽)
        clean_filename = os.path.splitext(filename)[0]
        temp_price_df.rename(columns={"PriceUSD": clean_filename}, inplace=True)
        # 收集这个文件的所有时间点
        all_time_points.extend(temp_price_df["time"].tolist())
        # 把处理好的df加入列表
        processed_price_dfs.append(temp_price_df)

# 构建基准时间DataFrame:去重、排序,确保时间轴完整
base_time_df = pd.DataFrame({"time": sorted(list(set(all_time_points)))})

# 第二步:把每个价格df和基准时间轴对齐
aligned_dfs = []
for df in processed_price_dfs:
    # 左连接保证所有基准时间都保留,缺失的价格用NaN填充
    aligned_df = pd.merge(base_time_df, df, on="time", how="left")
    aligned_dfs.append(aligned_df)

# 第三步:合并所有对齐后的df,得到最终结果
final_merged_df = base_time_df.copy()
for df in aligned_dfs:
    final_merged_df = pd.merge(final_merged_df, df, on="time", how="left")

# 如果你需要保留完整的原始数据(对应你原来的dflistcompleto)
# full_data_list = [pd.read_csv(f) for f in nombres if "PriceUSD" in pd.read_csv(f).columns]

# 查看结果
print(final_merged_df.head())

关键细节提示

  • 时间格式统一:如果不同CSV的time列格式不统一(比如有的是字符串、有的是时间戳),可以在读取时统一转成datetime类型:
    temp_price_df["time"] = pd.to_datetime(temp_price_df["time"])
    
  • 性能优化:如果CSV文件特别大,建议只读取time列来收集时间点,避免重复加载整个文件:
    # 只读取time列,节省内存
    temp_time = pd.read_csv(filename, usecols=["time"])["time"].tolist()
    all_time_points.extend(temp_time)
    
  • 缺失值处理:如果需要填充NaN(比如用前一天的值、均值),可以在合并后处理:
    # 前向填充(用最近的非缺失值填充)
    final_merged_df.fillna(method="ffill", inplace=True)
    # 或者按列填充均值
    final_merged_df = final_merged_df.apply(lambda col: col.fillna(col.mean()), axis=0)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:35:41