如何按指定格式拼接Pandas中的DataFrame列表?
按规则拼接多个DataFrame
问题描述
现有一个包含3个DataFrame的列表df_list,内容如下:
[0 1 2 3 0 X X 0 0 1 X X X X, 0 1 2 3 0 X X X X 1 0 0 X X, 0 1 2 3 0 X X X X]
需要将这些DataFrame按规则拼接成一个12列、5行的DataFrame:每个原DataFrame依次占据目标Data的对应行区域,其余位置填充0,最终效果如下:
0 1 2 3 4 5 6 7 8 9 10 11 0 X X 0 0 0 0 0 0 0 0 0 0 1 X X X X 0 0 0 0 0 0 0 0 2 0 0 0 0 X X X X 0 0 0 0 3 0 0 0 0 0 0 X X 0 0 0 0 4 0 0 0 0 0 0 0 0 X X X X
解决方案
通过预先创建目标结构的空DataFrame,再逐个将原DataFrame的值填充到对应位置即可实现,具体步骤如下:
1. 构造示例df_list(已有真实数据可跳过)
import pandas as pd # 构造第一个DataFrame df1 = pd.DataFrame([['X', 'X', '0', '0'], ['X', 'X', 'X', 'X']], columns=[0,1,2,3]) # 构造第二个DataFrame df2 = pd.DataFrame([['X', 'X', 'X', 'X'], ['0', '0', 'X', 'X']], columns=[0,1,2,3]) # 构造第三个DataFrame df3 = pd.DataFrame([['X', 'X', 'X', 'X']], columns=[0,1,2,3]) df_list = [df1, df2, df3]
2. 计算目标DataFrame的维度
# 总列数:单个DataFrame列数 * DataFrame数量 total_cols = df_list[0].shape[1] * len(df_list) # 总行数:所有DataFrame行数之和 total_rows = sum(df.shape[0] for df in df_list)
3. 创建填充默认值的目标DataFrame
# 用'0'填充所有位置,行/列索引从0开始连续编号 result_df = pd.DataFrame('0', index=range(total_rows), columns=range(total_cols))
4. 逐个填充原DataFrame到对应区域
current_row = 0 # 记录当前填充的起始行位置 for idx, df in enumerate(df_list): col_start = idx * df.shape[1] # 当前DataFrame的列起始位置 col_end = col_start + df.shape[1] row_end = current_row + df.shape[0] # 将当前df的值赋值到目标区域 result_df.loc[current_row:row_end-1, col_start:col_end-1] = df.values # 更新下一个DataFrame的起始行位置 current_row = row_end
5. 查看结果
执行代码后打印result_df即可得到目标格式:
print(result_df)
内容的提问来源于stack exchange,提问作者peter_parker
相关产品推荐
相关产品推荐

