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

如何编写Python函数实现CSV指定多列合并(基于Pandas combine_first)

问题:封装Pandas合并多列为一列的函数

需求说明

  • 实现Python函数,处理CSV文件,利用Pandas的combine_first方法将指定前缀的多列合并为一列
  • 函数参数:csv_name(CSV文件路径/名称)、col_prefix(列名前缀,如"A")、num_cols(需要合并的列数量)
  • 处理时需保留原DataFrame中的其他列,仅新增合并后的目标列

示例场景

假设CSV中有以下需合并的列(仅展示目标列,其他列保留):

import pandas as pd
import numpy as np

DF = pd.DataFrame({
    'A1': ['tree', 'grass', np.nan, np.nan, np.nan, np.nan],  
    'A2': [np.nan, np.nan, 'bird', 'fly', np.nan, np.nan],
    'A3': [np.nan, np.nan, np.nan, np.nan, 'cat', 'dog']
})

手动合并的正确代码:

DF["A"] = DF["A1"].combine_first(DF["A2"]).combine_first(DF["A3"])

合并后DF["A"]的结果为:['tree', 'grass', 'bird', 'fly', 'cat', 'dog']

现有错误代码

尝试编写的函数无法正常运行:

def column_merger(csvName, ColName, length:int):
    OriginalNameList = []
    for number in range(length):
        OriginalNameList.append(ColName + str(number))

    NewList = OriginalNameList[1:]

    for name in Newlist:
        NewList.append()
    command = []
    command.extend([.combine_first(SurveyName[NewList[name]]) for name in range(NewList)])

解决方案

正确函数实现

import pandas as pd
import numpy as np

def column_merger(csv_name, col_prefix, num_cols):
    # 读取CSV文件到DataFrame
    df = pd.read_csv(csv_name)
    
    # 生成待合并的列名列表(如前缀"A"、列数3时,生成["A1", "A2", "A3"])
    target_cols = [f"{col_prefix}{i+1}" for i in range(num_cols)]
    
    # 初始化合并列:以第一列为基础
    merged_col = df[target_cols[0]]
    
    # 循环合并后续列,用combine_first填充NaN
    for col in target_cols[1:]:
        merged_col = merged_col.combine_first(df[col])
    
    # 将合并后的列添加到原DataFrame,列名为前缀名
    df[col_prefix] = merged_col
    
    # 保存处理后的结果回CSV(可根据需求改为保存新文件)
    df.to_csv(csv_name, index=False)
    
    return df

代码说明

  1. 读取与列名生成:先读取CSV,再根据前缀和列数自动生成要合并的列名(如果你的列名是从0开始编号,把i+1改成i即可)
  2. 循环合并:从第一列开始,依次用combine_first合并后续列,确保优先保留前面列的非空值,用后面列的非空值填充前面的NaN
  3. 保存与返回:将合并后的列添加到原DataFrame,保存回CSV并返回处理后的DataFrame

使用示例

# 调用函数:处理test.csv,合并前缀为"A"的3列
processed_df = column_merger("test.csv", "A", 3)
# 查看合并后的列
print(processed_df["A"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:44:54