如何从DataFrame列表提取指定列并合并为带自定义列名的新DataFrame
问题描述
假设我有3个被包裹在列表中的DataFrame,分别为:
df_1 = pd.DataFrame({'text':['a','b','c','d','e'],'num':[2,1,3,4,3]}) df_2 = pd.DataFrame({'text':['f','g','h','i','j'],'num':[1,2,3,4,3]}) df_3 = pd.DataFrame({'text':['k','l','m','n','o'],'num':[6,5,3,1,2]})
对应的DataFrame列表为:
df_list = [df_1, df_2, df_3]
我希望遍历该列表,提取每个DataFrame的text列,合并为一个新DataFrame,将列名设置为topic_1、topic_2等自定义名称,期望结果如下:
topic_1 topic_2 topic_3 0 a f k 1 b g l 2 c h m 3 d i n 4 e j o
我已通过以下代码提取text列:
lst = [] for i in range(len(df_list)): lst.append(df_list[i]['text'].tolist())
但卡在了合并步骤,希望用非暴力手段将这些列合并为单个DataFrame。
解决方案
方法1:直接用pd.concat处理原列表(推荐)
无需先将列转成列表,直接提取每个DataFrame的text列并重命名,再按列合并:
import pandas as pd # 遍历列表,提取text列并批量重命名 dfs_to_concat = [df['text'].rename(f'topic_{idx+1}') for idx, df in enumerate(df_list)] # 按列合并生成结果 result_df = pd.concat(dfs_to_concat, axis=1) print(result_df)
方法2:基于已提取的lst列表生成DataFrame
如果已经得到lst,可以直接构造DataFrame并指定列名:
# 生成自定义列名 column_names = [f'topic_{idx+1}' for idx in range(len(lst))] # 转置后构造DataFrame(因为lst存储的是原列的行数据) result_df = pd.DataFrame(lst).T result_df.columns = column_names print(result_df)
方法3:循环中逐步构建DataFrame
也可以在循环过程中直接向空DataFrame添加列,避免额外列表存储:
result_df = pd.DataFrame() for idx, df in enumerate(df_list): result_df[f'topic_{idx+1}'] = df['text'] print(result_df)
内容的提问来源于stack exchange,提问作者Wiliam
相关产品推荐
相关产品推荐

