从文件中查找字符串并用作过滤器

时间:2019-06-06 01:26:06

标签: python dataframe

我有一些参考文件,其中包含在数据框中标记记录所需的条件。

参考文件

GROUP,CONDITION
1,df['a'].find('abc')
2,df['d'].find('def')
3,df['g'].find('ghi')

我想检查我的主数据是否在TEXTFIELD列中存在该字符串,并将其标记为相应的组。

主要数据

ID,TEXTFIELD
A,fsadflnashdfp**abc**asfa
B,**ghi**dsfasdfasfqegdfsd
C,orjtorenblmflvdfg**def**

期望结果

ID,GROUP
A,1
B,3
C,2

如何在参考文件中调用该函数?还是有其他更清洁的方式做到这一点?

当前脚本看起来像这样,我认为我做错了什么并抛出错误KeyError:“ df ['TEXTFIELD']。find('abc')”

x = [
     [1, "df['TEXTFIELD'].find('abc')"], 
     [2, "df['TEXTFIELD'].find('def')"], 
     [3, "df['TEXTFIELD'].find('ghi')"]

] 

y = [
     ['A','fsadflnashdfpabcasfa'],
     ['B','ghidsfasdfasfqegdfsd'],
     ['C','orjtorenblmflvdfgdef ']
]

df_ref = pd.DataFrame(x,columns=["GROUP","CONDITION"])
df = pd.DataFrame(x,columns=["ID","TEXTFIELD"])

condition = df_ref.loc[0,'CONDITION']

df_out = df[condition]

1 个答案:

答案 0 :(得分:0)

好的,如果我的理解正确,那么您的问题有3件事:

1-

df_ref = pd.DataFrame(x,columns=["GROUP","CONDITION"])
df = pd.DataFrame(x,columns=["ID","TEXTFIELD"])   # LOOK AT ME

我相信在上面的第二行中,您实际上的意思是y,而不是x,所以应该是:

df_ref = pd.DataFrame(x,columns=["GROUP","CONDITION"])
df = pd.DataFrame(y,columns=["ID","TEXTFIELD"])
                # |  <- right here

2-

df['TEXTFIELD'].find('abc')

find不是DataFrame的方法,但是您可以使用contains实现您想要的:

df['TEXTFIELD'].str.contains('abc')

3-

df_ref.loc[0,'CONDITION']

这将返回"df['TEXTFIELD'].str.contains('abc')",请注意,这是一个string,如果您调用df["df['TEXTFIELD'].str.contains('abc')"],则会因为不知道该字符串是什么而给您一个关键错误。您想使用该字符串的表达式做一个布尔掩码,为此,您可以使用eval

df[eval(condition)]

它将提供您想要的结果:

  ID             TEXTFIELD
0  A  fsadflnashdfpabcasfa

不好。:我知道人们会因为建议使用eval而向我投掷鸡蛋,这是一个巨大的安全威胁,因此,仅当您确定了解以下内容时,我才建议使用它您的档案中有什么。它将解决您的问题...