【问题标题】:Return keyword of string if found in dataframe columns如果在数据框列中找到,则返回字符串的关键字
【发布时间】:2023-04-09 01:41:01
【问题描述】:

我有一个字符串。我需要查找该字符串中的关键字是否存在于我的数据框中。

如果存在,我需要返回该关键字。

字符串:

question="Joe is Available"
question=question.upper()
str_list=question.split()
str_list

输出[107]:

['JOE', 'IS', 'AVAILABLE']

数据框:

df=pd.DataFrame({"Person1":("Ash","Joe","Harry"),"Person2":("Abe","Lisa","Katty",),"Person3":("Sam","Max","Stone")})
df=df.apply(lambda x: x.astype(str).str.upper())


Person1 Person2 Person3
ASH     ABE     SAM
JOE     LISA    MAX
HARRY   KATTY   STONE

我的尝试:

return_field=""
for x in str_list:
    print(x)
    for i in df.iterrows():
        if(df.str.contains(x)):
            return_field=x

给我 AttributeError: 'DataFrame' 对象没有属性 'str'

预期输出

由于 Joe 存在于数据框中,它应该返回给我“Joe”

【问题讨论】:

    标签: python regex string pandas dataframe


    【解决方案1】:

    使用

    In [741]: [x for x in str_list if x in df.values]
    Out[741]: ['JOE']
    

    【讨论】:

      【解决方案2】:

      如果您重复执行此操作,您可能希望通过 set 散列您的值。此外,您可以使用 mapstr.upper 将数据帧值转换为大写1

      str_all = set(map(str.upper, df.values.ravel()))
      
      question = "Joe is Available"
      str_search = set(question.upper().split())
      
      res = str_search & str_all
      
      # {'JOE'}
      

      1可以使用pd.DataFrame.apply + lambda,但不建议这样做。目前,通过pd.Series.str 进行的字符串操作非常缓慢。在顶部添加lambda 循环会使情况变得更糟。

      【讨论】:

        猜你喜欢
        • 2022-01-23
        • 2012-03-05
        • 2021-06-28
        • 1970-01-01
        • 1970-01-01
        • 2022-12-10
        • 2023-01-26
        • 2021-10-28
        • 1970-01-01
        相关资源
        最近更新 更多