如何将多份Pandas DataFrame输入大语言模型生成合并摘要?
解决多异结构DataFrame合并摘要生成及Token超限问题
1. 提取单DataFrame核心信息(避免全量数据传入)
不要直接传入完整DataFrame,而是针对每个表格提取Schema详情、关键统计、少量样本这三类核心信息,大幅压缩Token占用:
import pandas as pd def extract_df_key_info(df, df_name): # 1. Schema基础信息 schema_table = pd.DataFrame({ '列名': df.columns, '数据类型': df.dtypes.astype(str), '非空占比(%)': round(df.notna().mean() * 100, 2), '唯一值数量': df.nunique() }).to_markdown(index=False) # 2. 列级统计概览 stats_summary = [] for col in df.columns: if pd.api.types.is_numeric_dtype(df[col]): stats = f"- {col}: 均值{round(df[col].mean(),2)}, 中位数{df[col].median()}, 极值[{df[col].min()}, {df[col].max()}]" else: top_vals = df[col].value_counts().head(2).to_dict() stats = f"- {col}: Top2高频值 {top_vals}" stats_summary.append(stats) stats_text = "\n".join(stats_summary) # 3. 代表性样本(最多3条) sample_rows = df.sample(min(3, len(df))).to_dict('records') sample_text = "\n".join([f"- {row}" for row in sample_rows]) return f"""### 表格:{df_name} **Schema详情**:\n{schema_table} **统计概览**: {stats_text} **样本数据**: {sample_text}\n""" # 示例调用 df_sales = pd.DataFrame({'id': [1,2,3], 'sales': [100,200,300], 'category': ['A','B','A']}) df_users = pd.DataFrame({'user_id': [101,102], 'signup_date': pd.date_range('2023-01-01', periods=2), 'is_active': [True, False]}) all_table_info = [ extract_df_key_info(df_sales, '销售数据'), extract_df_key_info(df_users, '用户数据') ] combined_info = "\n".join(all_table_info)
2. 结构化传入大模型生成合并摘要
将上述生成的精简信息传入模型,用明确指令引导输出:
from openai import OpenAI client = OpenAI() response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "user", "content": f"请基于以下多个表格的核心信息,生成一份合并摘要,涵盖所有表格的核心内容、数据特征,以及潜在的关联点:\n\n{combined_info}"} ] ) print(response.choices[0].message.content)
3. 剩余Token压力的应对方案
如果合并后的信息仍接近模型上下文上限:
- 分批生成子摘要:先将表格分组,生成每组的子摘要,再将子摘要合并生成最终总摘要
- 切换大上下文模型:选用GPT-4 Turbo(128k上下文)、Claude 3 Sonnet(200k上下文)等支持更大输入的模型
- 进一步精简信息:移除非必要统计项(比如仅保留数值列的中位数和极值,省略均值;分类列只保留Top1高频值)
内容的提问来源于stack exchange,提问作者Raj Singh
相关产品推荐
相关产品推荐

