我有一个数据框,例如
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)
,但这似乎不是解决方案,谢谢您的帮助。
答案 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