如何将多份不同维度DataFrame存入新DataFrame单个单元格并去除索引
解决方案
问题根因
你观察到的索引被写入单元格的现象,是pandas打印外层DataFrame时,对单元格内的DataFrame对象默认调用字符串转换逻辑,自动带上索引和表头导致的,实际存储的子DataFrame结构是完整的,单独取出单元格内容即可正常使用。
1. 去除索引的实现
如果仅需要导出为可读的文本类格式,可通过to_string方法设置参数关闭索引和表头输出:
import pandas as pd # 示例子DataFrame df1=pd.DataFrame([[1,2,3]]*2) df2=pd.DataFrame([['a','b']]*3) df3=pd.DataFrame([[23,565,34,67,34]]*1) df4=pd.DataFrame([['df','grgrd','weddv','dfdf','re',45,93]]*5) # 生成无索引的字符串存入外层DataFrame dic = { 'a': df1.to_string(index=False, header=False), 'b': df2.to_string(index=False, header=False), 'c': df3.to_string(index=False, header=False), 'd': df4.to_string(index=False, header=False) } df_out = pd.DataFrame([dic])
导出到Excel时,设置单元格自动换行即可显示为规整的多行表格。
2. 单元格内嵌表格实现
如果需要输出为HTML格式,可直接将子DataFrame转换为HTML片段,导出时关闭转义即可渲染为内嵌表格:
dic_html = { 'a': df1.to_html(index=False, header=False), 'b': df2.to_html(index=False, header=False), 'c': df3.to_html(index=False, header=False), 'd': df4.to_html(index=False, header=False) } df_out_html = pd.DataFrame([dic_html]) # 导出为HTML文件,escape=False 会自动解析HTML标签为表格 df_out_html.to_html('result.html', escape=False)
打开生成的result.html即可看到每个单元格内都是独立的规整表格。
3. 分场景的最优实现方式
- 场景1:后续需要继续操作子DataFrame
你原本的存储逻辑是最优的,直接把子DataFrame作为对象存入外层DataFrame即可,存储的内容完全保留子DataFrame的所有结构和方法,需要使用时直接取单元格内容即可:
打印外层DataFrame时的显示异常仅为渲染问题,不影响实际使用。dic = {'a':df1, 'b':df2, 'c':df3, 'd':df4} df_out = pd.DataFrame([dic]) # 取出a列对应的子DataFrame操作 target_df = df_out.loc[0, 'a'] - 场景2:仅用于可读导出
优先使用上述to_string(Excel/CSV导出)或to_html(网页导出)的方案,兼顾可读性和导出效率。
内容的提问来源于stack exchange,提问作者Saad Zaheer
相关产品推荐
相关产品推荐

