如何用Python的openpyxl将条件筛选的Excel列值存入数组?
解决Excel列筛选生成单列数组的问题
你好呀!刚接触编程遇到这种问题很正常,我来帮你梳理一下问题所在,然后给出可行的解决方案~
首先,先说说你遇到的 TypeError: float() argument must be a string or a number, not 'Cell' 错误原因:
你在循环D列单元格时,判断 cell.value == 0 是没问题的,但后面直接把 clf['A'](这是整个A列的Cell对象集合)传给 np.insert,而不是当前行对应的A列单元格的值,numpy没法把Cell对象转成数值,所以报错了。另外 np.insert 的用法也不对,它不会直接修改原数组,需要重新赋值,而且循环里反复用 np.insert 效率也不高。
下面给你两种解决方案,根据你用的库来选:
方案一:用openpyxl(假设你用这个库操作Excel)
我们可以先把符合条件的A列值收集到列表里,最后再转成numpy单列数组,这样更简单高效:
import numpy as np # 假设clf是你的工作表对象(比如从openpyxl加载的) result_list = [] # 遍历每一行,同时获取A列和D列的值(values_only=True直接拿值,不是Cell对象) # 如果你的表格有表头,min_row设为2跳过表头,没有的话设为1 for row in clf.iter_rows(min_row=2, values_only=True): a_value = row[0] # A列是第0个索引(因为行是从左到右的顺序) d_value = row[3] # D列是第3个索引 if d_value == 0: result_list.append(a_value) # 把列表转成numpy单列数组 result_array = np.array(result_list).reshape(-1, 1) print(result_array)
方案二:用pandas(更适合处理表格数据,推荐新手尝试)
如果还没用过pandas,强烈建议试试,处理Excel数据会省心很多:
import pandas as pd import numpy as np # 读取你的Excel文件,替换成你的文件路径 df = pd.read_excel('your_excel_file.xlsx') # 筛选D列值为0的行,提取对应的A列数据 filtered_a_values = df[df['D'] == 0]['A'] # 转成单列numpy数组 result_array = filtered_a_values.values.reshape(-1, 1) print(result_array)
再回头说说你原来代码的问题:
- 循环
clf['D']得到的是Cell对象,你需要对应行的A列值,而不是整个A列 np.insert不会原地修改数组,需要把返回值重新赋值给数组,比如array = np.insert(array, 0, target_value),但循环里这么做远不如先收集到列表再转数组高效- 直接传入
clf['A']是整个列的Cell对象,不是单个值,导致类型错误
希望这些能帮到你,有问题随时问~
内容的提问来源于stack exchange,提问作者newtothis
相关产品推荐
相关产品推荐

