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

如何用Pandas从多CSV提取对应行生成新文件?代码仅首行有效排错

问题解析:CSV多行提取仅首行成功其余为NaN的原因与修复方案

问题场景回顾

你需要处理10个CSV文件,目标是将所有文件的第1行汇总保存为一个新CSV,第2行汇总保存为第二个新CSV,以此类推。但目前编写的代码仅能提取首行,其余行都显示NaN,我们来一步步拆解问题所在。

代码错误分析

先看你当前代码的核心问题:

  1. 逻辑完全偏离需求:你创建了一个单DataFrame(dfcsv),但你的需求是生成多个CSV文件(每个对应原文件某一行的汇总),两者的目标结构完全不匹配。
  2. 循环赋值逻辑错误:在遍历文件的循环中,你始终只给dfcsv.iloc[0]赋值——这意味着每处理一个文件,你都会覆盖掉之前文件的首行数据,最后dfcsv的第一行只会保留最后一个文件的首行,而其他行从未被赋值,自然全是NaN。
  3. 未实现多行汇总逻辑:代码完全没有遍历原文件的每一行,也没有收集所有文件对应行的数据,根本没触达到“每行汇总”的核心需求。

修复后的代码实现

下面是符合你需求的完整代码,注释里会说明每一步的作用:

import pandas as pd
import glob

path = r'/Jupyter_Works/new_csv'
all_files = glob.glob(path + "/*.csv")

# 1. 先读取所有CSV文件,存储到列表中统一管理
dfs_list = []
for filename in all_files:
    # 按原方式读取,保留time作为索引
    df = pd.read_csv(filename, index_col='time', header=0)
    dfs_list.append(df)

# 2. 校验所有文件的行数是否一致(避免汇总时出错)
if not all(len(df) == len(dfs_list[0]) for df in dfs_list):
    raise ValueError("所有输入CSV文件的行数必须完全一致!")

# 3. 遍历每一行索引,汇总所有文件的对应行并保存为独立CSV
total_rows = len(dfs_list[0])
# 复用你定义的列名
columns = ['Lat','Lon','Alt','Temperature','Relative Humidity','Wind speed','Wind direction','Short-wave irradiation']

for row_idx in range(total_rows):
    # 收集所有文件的第row_idx行数据
    combined_rows = [df.iloc[row_idx] for df in dfs_list]
    # 将收集到的行转为DataFrame
    combined_df = pd.DataFrame(combined_rows, columns=columns)
    # 保存为CSV,文件名可以按行号命名(比如combined_row_0.csv对应所有文件的第1行)
    combined_df.to_csv(f'{path}/combined_row_{row_idx}.csv', index=False)

额外优化建议

  • 如果你的CSV文件的time索引是标准时间格式,也可以通过索引值来匹配行(而不是行号),这样能避免因为文件行顺序不一致导致的错误,比如:
    # 按时间戳提取对应行
    target_time = dfs_list[0].index[row_idx]
    combined_rows = [df.loc[target_time] for df in dfs_list]
    
  • 如果存在行数不一致的文件,可以根据需求选择跳过、补全NaN或截断行,保证汇总逻辑的稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:46:19