簡體   English   中英

在數據框中搜索匹配的子字符串

[英]searching substring for match in dataframe

我正在嘗試使用我的 df 作為查找表,並嘗試確定我的字符串是否包含該 df 中的值。 簡單的例子

str = 'John Smith Business Analyst'
df = pd.read_pickle('job_titles.pickle')

df 將是具有多個職位的一列。

df = 會計師、律師、CFO、業務分析師等。

現在,以某種方式能夠確定 str 有一個子字符串:Business Analyst,因為該值包含在我的 df 中。

返回結果將是子字符串 = 'Business Analyst'

如果原始 str 是:

str = '約翰史密斯商業'

然后返回將為空,因為沒有子字符串與 df 中的字符串匹配。

如果是一個詞,我讓它工作。 例如:

df = pd.read_pickle('cities.pickle')
df = Calgary, Edmonton, Toronto, etc


str = 'John Smith Business Analyst Calgary AB Canada'
str_list = str.split()

for word in str_list:
    df_location = df[df['name'].str.match(word)]
    if not df_location.empty: 
        break

df_location = Calgary

城市將在 df 中找到,並返回那一行。 只是不確定當它超過一個詞時如何。

我不確定你想對返回的值做些什么,但這里至少有一種識別它的方法。 首先,我制作了一個玩具數據框:

import pandas as pd

titles_df = pd.DataFrame({'title' : ['Business Analyst', 'Data Scientist', 'Plumber', 'Baker', 'Accountant', 'CEO']})

search_name = 'John Smith Business Analyst'

titles_df

              title
0  Business Analyst
1    Data Scientist
2           Plumber
3             Baker
4        Accountant
5               CEO

然后,我遍歷title列中的值以查看它們中是否有任何在搜索詞中:

for val in titles_df['title'].values:
    if val in search_name:
        print(val)

如果要對數據框列中的所有名稱執行此操作並分配帶有標題的新列,您可以執行以下操作:

首先,我創建了一個具有一些名稱的數據框:

names_df = pd.DataFrame({'name' : ['John Smith Business Analyst', 'Dorothy Roberts CEO', 'Jim Miller Dancer', 'Samuel Adams Accountant']})

然后,我遍歷名稱的值和標題的值,並將匹配的標題分配給名稱數據框中的標題列(不匹配的標題將具有空字符串):

names_df['title'] = ''
for name in names_df['name'].values: 
    for title in titles_df['title'].values:
        if title in name:
            names_df['title'][names_df['name'] == name] = title

names_df
                          name             title
0  John Smith Business Analyst  Business Analyst
1          Dorothy Roberts CEO               CEO
2            Jim Miller Dancer                  
3      Samuel Adams Accountant        Accountant

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM