python-3.x - 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)
这个问题一点也不浪费时间,一路上学到了很多东西
推荐阅读
- javascript - 在 dist 文件夹的子目录中输出字体、css 文件和其他资源
- algorithm - 是否有一种压缩算法可以将多个输入压缩到相同的输出中,并且在解压缩时会生成所有原始输入?
- grafana - 是否可以在 LogQL 中将字符串值转换为数字?
- go - 当我尝试使用 Go 和 firebase adminSDK 获取用户数据时,我只能获取内存地址
- port - 我可以创建多个具有相同端口号的套接字吗?
- vue.js - 是否有任何可能的方法可以在 Vuetify 的 v-autocomplete 中搜索多个属性?
- angular - Visual Studio Code 中的 HTML 组件中的 Angular 10“找不到...的定义”
- javascript - 找不到模块:无法解析“@reactchartjs/react-chart-2.js”
- javascript - ServiceWorker 不加载匹配的资源
- linux - “libz.so.1:无法打开共享对象文件:没有这样的文件或目录”