如何从Excel数据库加载指定数据到Python?usecols报错求解
解决pandas读取Excel时列选择与行过滤的问题
你的代码报错是因为usecols参数只能用来指定要读取的列,不能在里面写行过滤条件。你写的'[Código Artículo]'==32和'[Código Rubro]'==2会返回布尔值,把布尔值混在列名字符串列表里,不符合usecols的要求(它只接受全字符串、全整数的列表,或者可调用函数),所以触发了ValueError。
下面是两种可行的解决方法:
方法一:先读指定列,再过滤行(适合中小数据量)
先读取需要的4列数据,再用布尔索引筛选符合条件的行,步骤清晰易维护:
import pandas as pd # 读取目标4列 df = pd.read_excel( 'BD_completa.xlsx', sheet_name='Hoja1', usecols=['[Fecha Orden Compra]', 'precio_del_bien', '[Código Artículo]', '[Código Rubro]'] ) # 过滤出满足两个条件的行 filtered_df = df[(df['[Código Artículo]'] == 32) & (df['[Código Rubro]'] == 2)]
方法二:分块读取并过滤(适合超大Excel文件)
如果Excel文件特别大,一次性读取会占用过多内存,可以分块读取并逐块过滤,最后合并结果:
import pandas as pd filtered_chunks = [] # 按10000行一块读取指定列 for chunk in pd.read_excel( 'BD_completa.xlsx', sheet_name='Hoja1', usecols=['[Fecha Orden Compra]', 'precio_del_bien', '[Código Artículo]', '[Código Rubro]'], chunksize=10000 ): # 过滤当前块的行 chunk_filtered = chunk[(chunk['[Código Artículo]'] == 32) & (chunk['[Código Rubro]'] == 2)] filtered_chunks.append(chunk_filtered) # 合并所有过滤后的块 filtered_df = pd.concat(filtered_chunks, ignore_index=True)
内容的提问来源于stack exchange,提问作者Suirebil
相关产品推荐
相关产品推荐

