ValueError:使用字典时无法将不匹配长度分配给掩码数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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在尝试查找其中的值时无法解释。

需要帮助以避免此问题。

答案

我解决了,从字典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)

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

以上是关于ValueError:使用字典时无法将不匹配长度分配给掩码数组的主要内容,如果未能解决你的问题,请参考以下文章

Pandas DataFrame:ValueError:值的长度(13)与索引的长度(12)不匹配

ValueError:索引长度不匹配:4064 与 1

Pandas ValueError:值的长度与索引的长度不匹配 - 创建新列

ValueError:长度不匹配:在熊猫数据框中创建分层列时,预期的轴有 0 个元素

ValueError:无法强制转换为 Series,长度必须为 1:给定 n

尝试使用 Seaborn 从 DataFrame 列绘制单变量分布时,“ValueError:无法一起广播操作数”