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