根据file.txt中的模式匹配子集数据帧

时间:2019-03-19 16:24:17

标签: python pandas

我有一个数据框,例如

query   subject col1
A   dog ok
B   cat okl
C   cat oklp
D   frog    ok
E   cat ok
F   fox ok

和file.txt,例如:

dog
cat 

,其想法是仅在file.txt中保留具有模式的行。 在这里我应该得到:

query   subject col1
A   dog ok
B   cat okl
C   cat oklp
E   cat ok

我尝试过:

file = open('file.txt').read()

df=[]
for row in tab['subject']:
 if row in file: 
   row.append(df)

,但这似乎不是解决方案,谢谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以使用df.loc[]来获取满足条件的特定行,并使用isin()来检查数据框中的内容是否出现在给定列表中。首先列出文件中的条目:

vals = []  # placeholder for our file contents
with open('file.txt', 'r') as a_file:
    for line in a_file:
        vals.append(line)

下一步,选择主题列是从文件中读取的值之一的行。假设您的数据帧称为df

new_df = df.loc[df.subject.isin(vals)]

侧面说明:您几乎永远都不想遍历数据框。对此有一些例外,但是通常来说,如果您发现自己在数据帧上进行迭代(例如for row in df:),则可以重写该段代码,以利用很多更有效。

答案 1 :(得分:2)

考虑到您的数据帧称为 df ,此答案还将file.txt读取为数据帧,并merge读取两个数据帧,从而获得所需的结果-解决方案类似于SQL的内部联接:

>> df2 = pd.read_csv('file.txt', header= None, names=['subject'])
>> pd.merge(df, df2, on='subject')

    query   subject col1
0   A       dog     ok
1   B       cat     okl
2   C       cat     oklp
3   E       cat     ok