查找Excel包含关键字的行(の几种简单快速方法)

发布于:2025-03-03 ⋅ 阅读:(156) ⋅ 点赞:(0)

需求:数据在后缀为xlsx的Excel的sheet1中且量比较大,比如几十万行几百列;想查找一个关键字所在的行,比如"全网首发"

情况①知道关键字在哪一列

情况②不确定在哪一列,很多列相似又不同,本文演示遍历所有数据,但做点优化避免浪费时间性能;

关键字可能是一串数字,日志的部分内容,加密的某一段等

Excel实现和python实现;

数据大概这样子,这纯粹是我瞎编的简单演示数据,假设关键字为中文,商品全称、简称、特点列会造成查找重复:

1.知道关键字在哪一列

比如关键字在 商品简称 这一列!

1.1excel实现

①直接用筛选,包含,推荐!

超级表ctrl+T,小数据可以这样,数据多不推荐,就是将表本身的数据变成了插入的表格,超级表的筛选功能貌似更强,但数据一多,超级表会很卡;

③用Excel本身的函数:不推荐,麻烦不好用,比如关键字是  猛火

函数嵌套大致这样:

先在sheet2中,弄一个辅助列(本文是演示,其实可以将辅助列的结果包在函数中),用函数判断,这对锁行、列号和excel的公式功底有一定的要求;

find("查找关键字","哪个单元格")-->找到返回起始位置,没有返回错误;

辅助列中,找商品简称列,有没有包含猛火;可以看到辅助列,3和4就是sheet1中商品简称那一列有;

再叠加if,如果辅助列不是错误,就用index返回sheet1中对应数据,都需要往右边推一列,因为辅助列占了一个位置,或者其他函数,大概就是先这样,再那样,就行啦。

然后定位,错误,删掉,但我们的数据是很大的,而且excel的函数但凡写多点就令人窒息。

④power query、VBA、数据透视表,一般用这些稍微复杂点的方法,那肯定是经常做这些方面的工作,基本懂的都会用,本文主讲临时需求,简单高效干完就擦屁股完事。

1.2python实现

读写文件用pandas库为例

例如,我们知道这个关键字,必然在“商品简称”之中:

import pandas as pd
path = "d:/test.xlsx"
df = pd.read_excel(path)

row_list= [] # 存符合条件的行号
for index_num in df.index:
    data = df.loc[index_num,"商品简称"]
    if data.find("家用")!=-1:
        print(data)
        row_list.append(index_num)
print(row_list)     

 find方法,找到了返回关键字在str中起始位置,找不到返回-1;

别用str.contains方法,因为你会遇到很讨厌的错误!同时避免了正则,运行效率upupup。

2.假如列很多,根本就不知道关键字在哪一列

此时excel就很蛋疼了,感觉应该可以,但是并不想去弄。

python实现:

此时基本上是遍历数据硬来了,可以自写方法,iloc或者loc,根据数据类型从行、列df.index,df.columns遍历都行;

不过推荐使用一个函数iterrows(),返回df的行索引和df每一个行数据,注意是行数据series类型;

row_list= []
for row_index,row_data in df.iterrows():
    try:
        for col in df.columns:
            cell_data = df.loc[row_index,col]
    #         if str(row_data[col]).find("猛火")!=-1:
            if str(cell_data).find("猛火")!=-1:
                row_list.append(row_index)
                raise ValueError("已找到条件")
    except:
        pass

print(row_list)

①为什么要用try,except?

因为我们要的数据是整个行,只要其中某一列符合条件,整行都要。但凡哪一列找到了关键字,结果存到list中,直接报个错,避免了往后面的列遍历的无用功,比set去重好;

②注意要str(cell_data),因为时间列这种东西,总会出点小问题;


网站公告

今日签到

点亮在社区的每一天
去签到