我有一个数据框架,如
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)但这似乎不是解决办法,谢谢你的帮助。
发布于 2019-03-19 16:34:01
考虑到您的数据框架名为df,此答案还将file.txt读入数据帧和合并数据帧,从而得到类似于来自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发布于 2019-03-19 16:30:36
您可以使用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)接下来,选择subject列是从文件中读取的值之一的行。假设您的数据被称为df
new_df = df.loc[df.subject.isin(vals)]附带注意:您几乎从来不想在数据文件上迭代。这是有例外的,但是通常情况下,如果您发现自己在数据访问(例如for row in df:)上迭代,您可以重写这段代码来利用Pandas中的向量化函数,这些函数的效率要高得多。
https://stackoverflow.com/questions/55245694
复制相似问题