使用 Pandas 数据透视表查找重复项第一次有效,第二次失败

问题描述 投票:0回答:1

我们有一个 xlsx 文件,我们将其处理成数据框以收集 重复值和重复次数

def duplicationCount(table_file_path, targetColumns):
    dfTable = pd.read_excel(io=table_file_path, sheet_name='Sheet1', skiprows=0)
    dfTable.columns = dfTable.columns.str.strip("'")
    res = dfTable.pivot_table(index=targetColumns, aggfunc='size')
    res.reset_index()
    res.rename(columns={'Unnamed: 0': 'no of dups'}, inplace=True)
    res.index.name = 'index'
    res = res[res['no of dups'] >= 2]
    targetColumns.extend(['no of dups'])
    res = res.filter(targetColumns).values.tolist()
    return res

第一次使用时效果很好,输出包含以下内容:

账户 没有重复
10301 2022 2
42334 2022 2

但是第二次我们使用相同的文件运行相同的代码:

Traceback (most recent call last):
  File "E:\Programs\XX\backend\app\views.py", line 265, in app_process_text_file
    results['DuplicationReportResults'] = duplicationCount(tables_file_paths[0], dupsFindingTargets)
  File "E:\Programs\XX\backend\app\functions.py", line 92, in duplicationCount
    res = dfTable.pivot_table(index=targetColumns, aggfunc='size')
  File "E:\Programs\XX\venv\lib\site-packages\pandas\core\frame.py", line 8044, in pivot_table
    return pivot_table(
  File "E:\Programs\XX\venv\lib\site-packages\pandas\core\reshape\pivot.py", line 95, in pivot_table
    table = __internal_pivot_table(
  File "E:\Programs\XX\venv\lib\site-packages\pandas\core\reshape\pivot.py", line 164, in __internal_pivot_table
    grouped = data.groupby(keys, observed=observed, sort=sort)
  File "E:\Programs\XX\venv\lib\site-packages\pandas\core\frame.py", line 7718, in groupby
    return DataFrameGroupBy(
  File "E:\Programs\XX\venv\lib\site-packages\pandas\core\groupby\groupby.py", line 882, in __init__
    grouper, exclusions, obj = get_grouper(
  File "E:\Programs\XX\venv\lib\site-packages\pandas\core\groupby\grouper.py", line 882, in get_grouper
    raise KeyError(gpr)
KeyError: 'no of dups'
python django pandas pivot-table xlsx
1个回答
0
投票

dupsFindingTargets 似乎是一个可变对象。您可以通过执行 targetColumns.extend(['no of dups']) 在函数中修改它。此更改现在也将出现在函数外部的 dupsFindingTargets 中。因此,当您再次调用它时,dupsFindingTargets 将已经包含“没有重复项”,这会引发错误,因为您尚未将该列添加到表中。因此,请确保在调用该函数之前重置 dupsFindingTargets 变量。

© www.soinside.com 2019 - 2024. All rights reserved.