如何向Pandas DataFrame追加字典键值且不重复生成列名行
问题解决方法
问题根因
你现有代码的逻辑是每次循环都单独创建一个子DataFrame并调用打印方法,pandas默认每次打印DataFrame都会输出表头(列名行),因此会出现重复的列名行。
方案1:合并为全量DataFrame(推荐用于后续分析、导出场景)
该方案是工业界最常用的规范写法,先把所有数据处理完成后合并为单个完整的DataFrame,后续不管是打印还是导出Excel都不会出现重复列名问题,代码如下:
import pandas as pd # 初始化空列表存储所有处理后的子DataFrame df_buffer = [] for k, v in Liste_phrases_retraduit.items(): v.pop(0) split_rows = [i.split("\t") for i in v] tmp_df = pd.DataFrame(split_rows, columns=['identifiant', 'verbatim', 'etiquette']) tmp_df['id_langue'] = k df_buffer.append(tmp_df) # 合并所有子表,ignore_index参数会重置全局行号 full_df = pd.concat(df_buffer, ignore_index=True) # 打印全量数据 print(full_df) # 直接导出到Excel,无重复列名 # full_df.to_excel("翻译结果汇总.xlsx", index=False)
方案2:循环打印仅显示一次列名(适用于仅需要按分组输出打印的场景)
如果你的需求就是按语言分组循环打印,不需要保留全量表,可以通过to_string的header参数控制仅第一次打印时输出列名:
import pandas as pd # 标记是否是第一次打印 is_first = True for k, v in Liste_phrases_retraduit.items(): v.pop(0) split_rows = [i.split("\t") for i in v] df = pd.DataFrame(split_rows, columns=['identifiant', 'verbatim', 'etiquette']) df['id_langue'] = k # header参数控制是否输出列名 print(df.head().to_string(header=is_first)) is_first = False # 每组之间加空行分隔,匹配你预期的输出格式 print("\n")
内容的提问来源于stack exchange,提问作者kely789456123
相关产品推荐
相关产品推荐

