首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据file.txt大熊猫的模式匹配划分数据框架

根据file.txt大熊猫的模式匹配划分数据框架
EN

Stack Overflow用户
提问于 2019-03-19 16:24:17
回答 2查看 127关注 0票数 2

我有一个数据框架,如

代码语言:javascript
复制
query   subject col1
A   dog ok
B   cat okl
C   cat oklp
D   frog    ok
E   cat ok
F   fox ok

和一个file.txt,例如:

代码语言:javascript
复制
dog
cat 

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

代码语言:javascript
复制
query   subject col1
A   dog ok
B   cat okl
C   cat oklp
E   cat ok

我试过:

代码语言:javascript
复制
file = open('file.txt').read()

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

但这似乎不是解决办法,谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-19 16:34:01

考虑到您的数据框架名为df,此答案还将file.txt读入数据帧和合并数据帧,从而得到类似于来自SQL的内部连接的预期结果解决方案:

代码语言:javascript
复制
>> 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
票数 2
EN

Stack Overflow用户

发布于 2019-03-19 16:30:36

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

代码语言:javascript
复制
vals = []  # placeholder for our file contents
with open('file.txt', 'r') as a_file:
    for line in a_file:
        vals.append(line)

接下来,选择subject列是从文件中读取的值之一的行。假设您的数据被称为df

代码语言:javascript
复制
new_df = df.loc[df.subject.isin(vals)]

附带注意:您几乎从来不想在数据文件上迭代。这是有例外的,但是通常情况下,如果您发现自己在数据访问(例如for row in df:)上迭代,您可以重写这段代码来利用Pandas中的向量化函数,这些函数的效率要高得多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55245694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档