如何将DataFrame以Excel表格形式赋值到另一DataFrame指定列
问题原因
直接执行df1["size_chart"] = df2时,Pandas会默认按索引对齐规则做列级赋值,尝试把df2的各列拆分匹配到df1的行,不会将整个df2作为单个值填入单元格,因此达不到单元格承载完整二维表的效果。
实现方案
根据实际使用场景选对应方法即可:
场景1:需要在单元格内存储结构化的df2对象,后续可直接取出当DataFrame调用
赋值时把df2包装成和df1行数等长的列表,Pandas会把列表内的每个元素作为单个值填入对应行单元格:# 给df1所有行的size_chart列都存入完整df2,要存独立副本就把df2换成df2.copy() df1["size_chart"] = [df2 for _ in range(len(df1))] # 如果只需要给指定行(比如第一行)存表格,其余行留空,用下面的写法 fill_values = [None] * len(df1) fill_values[0] = df2 # 0对应第一行,按需要的行号修改索引即可 df1["size_chart"] = fill_values后续要取单元格内的表格,直接用
df1.loc[行索引, "size_chart"]就能拿到完整的df2对象做处理。场景2:需要导出Excel后实现真正的单元格内嵌表格视觉效果
仅在单元格存DataFrame对象无法被Excel识别渲染,需要配合openpyxl直接操作工作表单元格写入表格内容,实现你示例里普通列单行排布、尺寸表占多行内嵌的效果:from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows # 初始化工作簿 wb = Workbook() ws = wb.active # 先写入df1除size_chart外的普通列内容(含表头) normal_cols = [c for c in df1.columns if c != "size_chart"] for row_idx, row_content in enumerate(dataframe_to_rows(df1[normal_cols], index=False, header=True), 1): for col_idx, cell_val in enumerate(row_content, 1): ws.cell(row=row_idx, column=col_idx, value=cell_val) # 定位size_chart列的位置,openpyxl行列索引从1开始计数 size_col_pos = df1.columns.get_loc("size_chart") + 1 # 从数据首行(第2行,第1行是表头)开始写入df2的完整内容 table_start_row = 2 for row_offset, table_row in enumerate(dataframe_to_rows(df2, index=False, header=False)): for col_offset, cell_val in enumerate(table_row): ws.cell( row=table_start_row + row_offset, column=size_col_pos + col_offset, value=cell_val ) # 导出最终文件 wb.save("带内嵌尺寸表的输出文件.xlsx")场景3:仅需要在单元格存储文本格式的表格,不需要保留结构化属性
直接把df2转成固定排版的字符串存入即可,打印df1时就能直接看到完整表格内容:# 转成纯文本表格存入 df1["size_chart"] = [df2.to_string(index=False) for _ in range(len(df1))]
内容的提问来源于stack exchange,提问作者syed towfiqur rahim
相关产品推荐
相关产品推荐

