如何编写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
代码说明
- 读取与列名生成:先读取CSV,再根据前缀和列数自动生成要合并的列名(如果你的列名是从0开始编号,把
i+1改成i即可) - 循环合并:从第一列开始,依次用
combine_first合并后续列,确保优先保留前面列的非空值,用后面列的非空值填充前面的NaN - 保存与返回:将合并后的列添加到原DataFrame,保存回CSV并返回处理后的DataFrame
使用示例
# 调用函数:处理test.csv,合并前缀为"A"的3列 processed_df = column_merger("test.csv", "A", 3) # 查看合并后的列 print(processed_df["A"])
内容的提问来源于stack exchange,提问作者VBC
相关产品推荐
相关产品推荐

