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

如何从CSV文件中推断候选键并输出对应列的全部取值

代码修改方案

改动说明

  • 补全原代码缺失的glob、os模块导入,修正pandas别名声明,解决基础运行报错
  • 移除了函数调用外层多余的print,避免输出无意义的None值(该函数无返回值)
  • 在候选键判定通过的逻辑分支下,新增遍历候选键列、提取列取值并按指定格式打印的逻辑
  • 原代码中key_options函数内的调试打印print(7,items)如果不需要可以自行删除

完整修改后代码

import pandas as pd
import glob
import os
from itertools import chain, combinations

def key_options(items):
    # 调试打印如不需要可删除
    print(7,items)
    return chain.from_iterable(combinations(items, r) for r in range(1, len(items)+1))

def primary_key_discovery(data_path):
    csv_files = glob.glob(os.path.join(data_path, "*.csv"))
    for f in csv_files:
        df = pd.read_csv(f)
        for candidate in key_options(list(df.columns)[1:]):
            deduped = df.drop_duplicates(candidate)
            if len(deduped.index) == len(df.index):
                # 打印原格式的文件和候选键信息
                print(f, ','.join(candidate))
                # 新增:打印每个候选键列的取值
                for col in candidate:
                    # 这里用unique()取去重后的值,如需打印全部原始值,去掉.unique()即可
                    col_values = df[col].unique().astype(str).tolist()
                    print(f"{col}:{','.join(col_values)}")

primary_key_discovery('Data1/')

输出效果示例

运行后输出格式如下:

Data1\vehicle.csv model,price,engine-size
model:camery,altima,aclass
price:18000,22000,25000
engine-size:2.0,2.5,1.3

内容的提问来源于stack exchange,提问作者Noor Khalaf Alhammad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:54:04