如何用Pandas在大型CSV文件中查找特定关键词并获取相关行/列信息?
用Pandas找CSV里任意位置的关键词,还能拿完整行信息
先看示例数据:
first last email 0 Corey Schafer CoreMSchafer@gmail.com 1 Jane Doe JaneDoe@gmail.com 2 John Doe JohnDoe@gmail.com
第一步:把CSV读进Pandas
不管文件多大,先加载成DataFrame:
import pandas as pd df = pd.read_csv("你的大型CSV文件路径.csv")
第二步:全表搜关键词,不用管在哪列
不确定关键词在第几行第几列?直接遍历所有单元格查找,一行代码就能筛出包含目标关键词(比如"John")的所有行:
keyword = "John" # 生成每行的匹配标记:只要该行有任意单元格含关键词就标True match_rows = df.applymap(lambda cell: keyword in str(cell)).any(axis=1) # 提取所有匹配的行 matched_data = df[match_rows]
解释下:applymap会挨个检查每个单元格,转成字符串是为了避免数值类型报错;any(axis=1)意思是只要这行里有一个单元格符合条件,就算匹配成功。
第三步:查看完整结果
直接打印matched_data,所有包含关键词的行都会完整显示,包括该行所有列的信息。比如示例里会输出:
first last email 2 John Doe JohnDoe@gmail.com
要是有多个匹配条目,所有符合的行都会被一次性捞出来,不会遗漏。
可选:精准匹配vs模糊匹配
上面是模糊匹配(单元格里包含关键词就算),如果要找内容完全等于关键词的单元格,把lambda表达式改了就行:
match_rows = df.applymap(lambda cell: str(cell) == keyword).any(axis=1)
大文件优化技巧
要是CSV文件特别大,一次性加载卡顿的话,试试分块读取:
chunk_size = 10000 # 每次读1万行 all_matches = [] for chunk in pd.read_csv("你的大型CSV文件路径.csv", chunksize=chunk_size): chunk_matches = chunk.applymap(lambda cell: keyword in str(cell)).any(axis=1) all_matches.append(chunk[chunk_matches]) # 把所有块的结果合并 final_matches = pd.concat(all_matches)
内容的提问来源于stack exchange,提问作者Fantom
相关产品推荐
相关产品推荐

