【问题标题】:Searching for an item within a list in a column and saving that item to a new column在列中的列表中搜索项目并将该项目保存到新列
【发布时间】:2019-08-18 05:05:23
【问题描述】:

我是 Python 新手,需要帮助!

我想在数据框的一列中搜索列表中的项目,如果找到,则将该项目存储在新列中。我的位置列很乱,如果有的话,我正在尝试提取州缩写。

到目前为止,我已经能够找到找到搜索词的列(我不确定这是否 100% 正确),我将如何获取找到的搜索词并将其存储在新列中?

state_search=('CO', 'CA', 'WI', 'VA', 'NY', 'PA', 'MA', 'TX',)

pattern = '|'.join(state_search) 

state_jobs_df=jobs_data_df.loc[jobs_data_df['location'].str.contains(pattern), :]

我想获取找到的状态并将其存储在新的“状态”列中。感谢您的帮助。


print (jobs_data_df)
                                            location
0                                  Madison, WI 53702
1  Senior Training Leader located in Raynham, MA ...
2                                           Dixon CA
3                   Camphill, PA Weekends and nights
4           Charlottesville, VA Some travel required
5                                        Houston, TX
6                                   Denver, CO 80215
7  Respiratory Therapy Primary Location : TX- Som...

【问题讨论】:

  • 由于您正在进行正则表达式搜索,我想在州名称周围添加\b,这样一些SKY Hotel, NH 就不会匹配肯塔基州。
  • @9000 - 是的,字边界 - 在我的回答中。
  • 如果我的回答对您有帮助,请不要忘记accept 它 - 单击答案旁边的复选标记,将其从灰色切换为已填充。谢谢。

标签: python string pandas list search


【解决方案1】:

Series.str.extract 与单词边界一起使用,并通过Series.notnaDataFrame.dropna 过滤非缺失行:

pat = '|'.join(r"\b{}\b".format(x) for x in state_search)
jobs_data_df['state'] = jobs_data_df['location'].str.extract('('+ pat + ')', expand=False)
jobs_data_df = jobs_data_df[jobs_data_df['state'].notna()]

或者:

jobs_data_df = jobs_data_df.dropna(subset=['state'])

【讨论】:

    【解决方案2】:

    这有点 hack-y,但更简单的解决方案可能采用类似于以下的形式:

    for row in dataRows:
        for state in state_search:
            if state in row:
                #put state in correct column here
                break #should break just the inner loop; if that doesn't happen, delete this line
    

    考虑一下底层程序如何解决问题可能会有所帮助(检查每一行是否有与您的某个状态匹配的字符串,然后对其进行处理),然后直接进行处理。除非您要处理大量数据,否则可能不值得疯狂地使用正则表达式等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      相关资源
      最近更新 更多