You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用循环简化Python中多主题DataFrame的创建与合并代码?

简化重复代码:用循环批量生成并合并主题DataFrame

原重复代码示例

# Topic -1 对应的代码
keyword = pd.DataFrame(
    Q5_model.get_topic(freq.iloc[-1]["Topic"]),
    columns = ["keyword","c-TF-IDF scores"]
)

keyword['Topic'] = Q5_model.get_topic_info().query("Topic == -1")['Name']
keyword['Count'] = Q5_model.get_topic_info().query("Topic == -1")['Count']
keyword['Topic number'] = '-1'

# Topic 0 对应的代码
keyword0 = pd.DataFrame(
   Q5_model.get_topic(freq.iloc[0]["Topic"]), 
   columns = ["keyword","c-TF-IDF scores"]
)

keyword0['Topic'] = Q5_model.get_topic_info().query("Topic == 0")['Name']
keyword0['Count'] = Q5_model.get_topic_info().query("Topic == 0")['Count']
keyword0['Topic number'] = '0'
keyword_all = keyword.append(keyword0)

注:keyword1至keyword4的代码结构与上述完全一致

初步框架存在的问题

你写的循环框架有几个关键错误:

  • range(-1,4)仅会遍历-1、0、1、2、3,遗漏了Topic 4,需调整范围
  • query("Topic == x")中的变量x无法被字符串解析,会被当作字面量"x"处理
  • 循环内直接append的方式效率低且容易出错,且df(keyword_x)是错误的语法
  • 重复调用Q5_model.get_topic_info()会降低代码运行效率

修正后的循环代码

import pandas as pd

# 初始化空列表,用于存储每个主题的DataFrame
topic_dataframes = []

# 遍历目标主题:-1、0、1、2、3、4
for topic_num in [-1, 0, 1, 2, 3, 4]:
    # 根据主题编号获取对应的Topic ID
    if topic_num == -1:
        target_topic = freq.iloc[-1]["Topic"]
    else:
        target_topic = freq.iloc[topic_num]["Topic"]
    
    # 创建关键词DataFrame
    current_df = pd.DataFrame(
        Q5_model.get_topic(target_topic),
        columns=["keyword", "c-TF-IDF scores"]
    )
    
    # 一次性获取当前主题的信息,避免重复调用接口
    topic_detail = Q5_model.get_topic_info().query(f"Topic == {topic_num}").iloc[0]
    
    # 补充字段
    current_df['Topic'] = topic_detail['Name']
    current_df['Count'] = topic_detail['Count']
    current_df['Topic number'] = str(topic_num)  # 和原代码保持一致,存为字符串类型
    
    # 将当前DataFrame加入列表
    topic_dataframes.append(current_df)

# 合并所有主题的DataFrame
keyword_all = pd.concat(topic_dataframes, ignore_index=True)

# 保存到CSV文件
keyword_all.to_csv(SAVE_DIR + 'keyword_all_Q5_model.csv', index=False)

优化说明

  • 减少重复调用:一次性获取单主题的详情信息,避免多次调用get_topic_info()
  • 高效合并:用pd.concat替代循环内的append,符合pandas的规范且效率更高
  • 索引规范:ignore_index=True保证合并后DataFrame的索引连续无重复
  • 类型统一:Topic number字段与原代码保持字符串类型,如需数字类型可去掉str()转换

内容的提问来源于stack exchange,提问作者vegetable-salad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:33:21