Python:过滤包含关键字的行

Python Pandas:根据指定的关键字,过滤(提取)包含该关键字的行,并保存为 Excel 文件。

import pandas as pd
import numpy as np

inFile = r'D:\教学任务列表 (理论课).xlsx'
outFile = r'D:\教学任务(统计).xlsx'

df1 = pd.read_excel(inFile,header=1)
type(df1)
df1.head()
df1.columns.shape
keys_wd = ['物理','电子','通信']
conditions = df1['教学班名称'].str.contains('|'.join(keys_wd))
wudian = df1[conditions]

#
wudian2 = df1[df1['教学班名称'].apply(lambda x: any(key in x for key in keys_wd))]
wudian2

# 1 直接存-不能写多个sheet
wudian.to_excel(outFile,sheet_name='公共课',index=False) # 
# df1.to_excel(outFile,sheet_name='所有课',index=False)

# 2 使用ExcelWriter
with pd.ExcelWriter(outFile) as writer:
    df1.to_excel(writer,sheet_name='所有课')
    wudian.to_excel(writer,sheet_name='公共课')

# 3 ExcelWriter,必究自由的方式
writer = pd.ExcelWriter(outFile)
wudian.to_excel(writer,sheet_name='公共课',index=False)
df1.to_excel(writer,sheet_name='所有课',index=False)

上面例子中,列单元格中包含有关键字,比如:电子 2001、通信 2001 等形式。如果单元格是由关键字直接混合组成,比如:电子、通信、电子,也可以用上面的代码,但是更简洁的是使用 pd.merge

df1 = pd.DataFrame({'姓名':['张三','李四','王五','马七','杨八'],
					'其他':[100,200,300,400,500]})
df2 = pd.DataFrame({'姓名':['张三','李四','王五']})
df1.merge(df2) #默认inner

参考:

  1. Pandas如何检查列是否包含列表中的字符串
  2. 合并连接之 merge
  3. 再见!Pandas 中的 Merge 方法
posted @ 2023-08-26 10:46  hzworld  阅读(130)  评论(0编辑  收藏  举报