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

Python中CSV写入异常值且无法生成合并CSV的问题求助

问题:CSV合并后写入异常值,控制台输出正常

我编写的Python代码用于读取指定目录下所有CSV文件,对指定列过滤后合并DataFrame并写入新CSV。VS控制台能输出正确的筛选结果,但生成的CSV文件存在异常值,无法得到预期结果。


代码实现

# 替换为你的实际代码
import os
import pandas as pd

def merge_filtered_csvs(input_dir, output_path, filter_col, filter_val):
    merged_data = []
    for file in os.listdir(input_dir):
        if file.endswith(".csv"):
            full_path = os.path.join(input_dir, file)
            df = pd.read_csv(full_path)
            # 过滤指定列
            filtered = df[df[filter_col] == filter_val]
            print(filtered)  # 控制台输出正确
            merged_data.append(filtered)
    # 合并并写入文件
    combined_df = pd.concat(merged_data)
    combined_df.to_csv(output_path, index=False)

# 调用示例
merge_filtered_csvs("./csv_files", "result.csv", "type", "valid")

输入示例(单个CSV内容)

data1.csv

id,type,value
1,valid,100
2,invalid,200
3,valid,150

data2.csv

id,type,value
4,valid,300
5,invalid,250

异常输出情况

异常CSV内容截图
说明:控制台输出仅包含type=valid的行,但生成的result.csv中出现NaN值、重复表头或乱码等异常


排查与解决方法

1. 统一列名格式

不同CSV文件的列名可能存在大小写、空格差异(比如Type vs type、type vs type),导致过滤后生成空DataFrame,合并后出现NaN。
解决代码:

df = pd.read_csv(full_path)
# 标准化列名:转小写+去除首尾空格
df.columns = [col.strip().lower() for col in df.columns]
# 过滤时使用标准化后的列名
filtered = df[df[filter_col.strip().lower()] == filter_val]

2. 处理空DataFrame

若某个CSV过滤后无匹配行,空DataFrame会被加入列表,合并后产生空行或NaN列。
解决代码:

if not filtered.empty:
    merged_data.append(filtered)

3. 指定写入编码

若CSV含中文或特殊字符,默认编码会导致乱码(表现为异常值)。
解决代码:

combined_df.to_csv(output_path, index=False, encoding="utf-8-sig")

4. 统一列顺序

不同CSV的列顺序不一致时,concat会自动填充NaN。
解决代码:

# 提前定义目标列顺序
target_cols = ["id", "type", "value"]
# 读取后强制按目标顺序取列
df = pd.read_csv(full_path)[target_cols]
filtered = df[df[filter_col] == filter_val]

5. 确保文件完全覆盖

多次运行代码可能残留旧数据,显式指定写入模式:

combined_df.to_csv(output_path, index=False, mode="w", encoding="utf-8-sig")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:45:32