我有一些参考文件,其中包含在数据框中标记记录所需的条件。
参考文件
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]
答案 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
而向我投掷鸡蛋,这是一个巨大的安全威胁,因此,仅当您确定了解以下内容时,我才建议使用它您的档案中有什么。它将解决您的问题...