Python 在列名称包含模式的多个列中筛选熊猫中的数据帧

Python 在列名称包含模式的多个列中筛选熊猫中的数据帧,python,pandas,indexing,filter,multiple-columns,Python,Pandas,Indexing,Filter,Multiple Columns,在过滤多列时,我看到了一些示例,其中我们可以使用类似以下内容过滤行:df[df['A'].str.contains(“string”)| df['B'].str.contains(“string”)] 我有多个文件,我想在其中获取每个文件,并仅从包含'email'字符串的列名中获取带有'gmail.com'的行 因此,示例头可以是这样的:“firstname”“lastname”“companyname”“address”“emailid1”“emailid2”“emailid3” 列email

在过滤多列时,我看到了一些示例,其中我们可以使用类似以下内容过滤行:
df[df['A'].str.contains(“string”)| df['B'].str.contains(“string”)]

我有多个文件,我想在其中获取每个文件,并仅从包含
'email'
字符串的列名中获取带有
'gmail.com'
的行

因此,示例头可以是这样的:“firstname”“lastname”“companyname”“address”“emailid1”“emailid2”“emailid3”

emailid1..2..3
中的EmailID包含
gmail.com
。我想获取gmail可以出现在任何一行中的行

for file in files:
    pdf = pd.read_csv('Reduced/'+file,delimiter = '\t')
    emailids = [col for col in pdf.columns if 'email' in col]
    #  pdf['gmail' in pdf[emailids]]
您可以使用:


给定输入示例:

df = pd.DataFrame({'email': ['test@example.com', 'someone@gmail.com'], 'somethingelse': [1, 2], 'another_email': ['whatever@example.com', 'something@example.com']})
例如:

您可以过滤掉包含电子邮件的列,查找
gmail.com
或任何您想要的文本,然后选择子集,例如:

df[df.filter(like='email').applymap(lambda L: 'gmail.com' in L).any(axis=1)]
这给了你:

           another_email              email  somethingelse
1  something@example.com  someone@gmail.com              2
df[df.filter(like='email').applymap(lambda L: 'gmail.com' in L).any(axis=1)]
           another_email              email  somethingelse
1  something@example.com  someone@gmail.com              2