如何清理Pandas解析Excel后数组中的冗余输出信息?
解决方法
你的问题核心是代码里拿到的不是纯标量值,而是pandas的Series对象或者numpy数组,所以输出会带索引、dtype这些冗余信息。以下是具体修改方案:
问题根源
xlEntries.loc[xlEntries['StockNumber'] == partNumbers[k]].index.to_numpy()返回的是numpy数组,哪怕只有一个行号,也会是类似array([5])的格式,不是单个整数。- 用这个数组去取列值时,
xlEntries.loc[rowNumber[k],"Pat's Proposed Change"]返回的是Series对象,不是单个单元格值,所以会附带索引、Name等信息。
修改后的代码
k = 0 while k < fileCount: # 获取第一个匹配StockNumber的行号(直接取整数,不是数组) match_rows = xlEntries[xlEntries['StockNumber'] == partNumbers[k]] if not match_rows.empty: # 加判断避免无匹配时报错 row_num = match_rows.index[0] rowNumber.append(row_num) # 直接提取标量值 specName.append(xlEntries.loc[row_num, "Pat's Proposed Change"]) specValue.append(xlEntries.loc[row_num, "StringValue"]) k += 1
关键改动说明
- 获取行号:用
match_rows.index[0]直接拿到单个整数行号,替代原来的to_numpy(),这样rowNumber里存的都是纯整数,不是数组。 - 提取单元格值:因为row_num是整数,
xlEntries.loc[row_num, 列名]会直接返回标量值,不会带冗余信息。 - 增加空值判断:如果某个partNumbers[k]在表格里找不到匹配,
match_rows.empty会是True,跳过避免索引报错(可选,但建议加上)。
为什么你的remove方法没用
rowNumber.remove([])报错是因为rowNumber里的元素是numpy数组(比如array([5])),不是空列表[],找不到对应元素所以报错。specnumber.remove('dtype')报错是因为specName里的元素是Series对象,不是字符串'dtype',自然找不到要删除的内容。
内容的提问来源于stack exchange,提问作者Jaiven McIntosh
相关产品推荐
相关产品推荐

