首页 > 解决方案 > ValueError:使用字典时无法将不匹配长度分配给掩码数组

问题描述

我制作了一个程序,在其中将用于信用卡交易的银行帐户中的原始文件转换为带有一些新列的已清理文件。

我正在根据我的字典替换列值。字典有 5 行,其中数据框有可变行。是将数据进一步分组为类型。

我也在过滤数据,所以也使用屏蔽。

替换代码

t_type = df2['Transaction'].replace(mappingforcc.load_dictionary.dictionary, inplace=True)

在调试时,当我使字典和数据帧中的行相等时,代码运行顺利,没有任何问题。但是当两者不匹配时,我会收到以下错误:

ValueError:无法将不匹配长度分配给掩码数组

我什至制作了一个函数,以便在我从 excel 文件创建字典时,我的原始代码中没有两个数据框。

尽管进行了多次搜索,但仍无法解决。

在此先感谢您的帮助。

编辑:我发现了问题,问题是我正在从以下代码创建字典

load_dictionary.dictionary2  = df_dict.groupby(['Transactions'])['Type'].apply(list).to_dict()

由于工作表中有多行,因此我在字典中得到以下输出。

{'Adv Tax FCY Tran 1%-F': ['Recoverable - Adv. Tax', 'Recoverable - Adv. Tax', 'Recoverable - Adv. Tax', 'Recoverable - Adv. Tax']

因此,如果出现“Adv Tax FCY Tran 1%-F”的另一笔交易,python 无法解释,因为它试图在其中找到一个值。

需要帮助来避免这个问题。

标签: python-3.xpandas

解决方案


我解决了它,从字典 excel 文件中删除了重复项。

我的文件中的每一行都有多行,因此按函数分组全部包含在字典中。当数字不匹配时,我得到了不匹配的错误。

我还创建了一个函数来创建我自己的目录来解决它,但没有使用它,因为在我删除重复项后它就像一个魅力。

我是编程的初学者,但仍然共享功能(转换为代码以便于共享和更易于每个人使用)

import openpyexcel 
from openpyexcel import load_workbook
import ast

file_path = r"filepath.xlsx"
df = openpyexcel.load_workbook(file_path)

ws = df['Sheet1'] #Enter your sheet name or automate using multiple functions in openpyxl
dictionary = "{"

for i in range(2,ws.max_row): #Since i have a header too, therefore started from 2nd Row
    dictionary = dictionary + '"' +  (ws[('A'+str(i))].value) + '"' + ":" + '"' + (ws[('B'+str(i))].value) + '"' #I have used column A and B, you can change accordingly.
    if i != (ws.max_row-1):
         dictionary =  dictionary + ',' 

dictionary =  dictionary + '}'
dictionary = ast.literal_eval(dictionary)

这个问题一点也不浪费时间,一路上学到了很多东西


推荐阅读