如何用Python Pandas合并3个Dataframe生成Excel单列
将多DataFrame指定列合并为单列的解决方法
原代码核心问题
你的代码没有真正利用df_one和df_two,只是在df_main内重复创建列,且合并操作是和自身重复合并,完全无法实现多列合并为单列的需求。以下分两种常见场景给出解决方案:
场景1:把三个DataFrame的指定列纵向堆叠成一个单列
将三个表中生成的拼接文本列,所有行合并成一个单独的列:
import pandas as pd # 读取文件 df_main = pd.read_excel('/Users/admin/Documents/Product_Key.xlsx', sheet_name='Sheet1') df_one = pd.read_excel('/Users/admin/Documents/Product1.xlsx', sheet_name='Sheet1', usecols="A:E") df_two = pd.read_excel('/Users/admin/Documents/Product2.xlsx', sheet_name='Sheet1', usecols="A:E") # 为每个表生成拼接文本列 def create_combined_col(df): return df['Label'].astype(str) + '_' + df['Type'].astype(str) + '_' + df['Serial ID'].astype(str) \ + '_' + df['Weight'].astype(str) + '_' + df['Row'].astype(str) df_main['combined'] = create_combined_col(df_main) df_one['combined'] = create_combined_col(df_one) df_two['combined'] = create_combined_col(df_two) # 纵向堆叠三个列成单列 df_single_col = pd.concat([df_main['combined'], df_one['combined'], df_two['combined']], ignore_index=True) # 保存到Excel df_single_col.to_excel('/Users/admin/Documents/New_Product_Key.xlsx', sheet_name="Sheet1", index=False, header=['Combined_Text'])
场景2:在主表中,将每行匹配的三个表内容拼接成单个长文本列
如果需要基于共同字段(如Time #)匹配三个表的对应行,再把每行的三个拼接文本合并成一个长文本列:
import pandas as pd # 读取文件 df_main = pd.read_excel('/Users/admin/Documents/Product_Key.xlsx', sheet_name='Sheet1') df_one = pd.read_excel('/Users/admin/Documents/Product1.xlsx', sheet_name='Sheet1', usecols="A:E") df_two = pd.read_excel('/Users/admin/Documents/Product2.xlsx', sheet_name='Sheet1', usecols="A:E") # 按Time #字段关联三个表 df_merged = df_main.merge(df_one, on='Time #', suffixes=('_main', '_one')) df_merged = df_merged.merge(df_two, on='Time #', suffixes=('', '_two')) # 生成单个长文本列,可自定义分隔符 df_merged['combined_text'] = ( f"{df_merged['Label_main']}_{df_merged['Type_main']}_{df_merged['Serial ID_main']}_{df_merged['Weight_main']}_{df_merged['Row_main']}" + ' | ' + f"{df_merged['Label_one']}_{df_merged['Type_one']}_{df_merged['Serial ID_one']}_{df_merged['Weight_one']}_{df_merged['Row_one']}" + ' | ' + f"{df_merged['Label']}_{df_merged['Type']}_{df_merged['Serial ID']}_{df_merged['Weight']}_{df_merged['Row']}" ) # 保存结果,仅保留合并后的单列(或按需保留其他列) df_merged[['combined_text']].to_excel('/Users/admin/Documents/New_Product_Key.xlsx', sheet_name="Sheet1", index=False)
内容的提问来源于stack exchange,提问作者goldraker34
相关产品推荐
相关产品推荐

