首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据另一个数据帧中的项对另一个数据帧中的项进行查找/替换?

如何根据另一个数据帧中的项对另一个数据帧中的项进行查找/替换?
EN

Stack Overflow用户
提问于 2021-06-25 02:15:25
回答 2查看 25关注 0票数 0

我有这个列表,我将其转换为数据帧。

代码语言:javascript
复制
labels = ['Airport',
        'Amusement',
        'Bridge',
        'Campus',
        'Casino',
        'Commercial',
        'Concert',
        'Convention',
        'Education',
        'Entertainment',
        'Government',
        'Hospital',
        'Hotel',
        'Library',  
        'Mall',
        'Manufacturing',
        'Museum',
        'Residential',
        'Retail',
        'School',
        'University',  
        'Theater',
        'Tunnel',
        'Warehouse']
labels = pd.DataFrame(labels, columns=['lookup'])
labels

我有这个数据框架。

代码语言:javascript
复制
df = pd.DataFrame({'Year':[2020, 2020, 2019, 2019, 2019],
                    'Name':['Dulles_Airport', 'Syracuse_University', 'Reagan_Library', 'AMC Theater', 'Reagan High School']})

如何根据标签中的匹配项清理df中的项?我的'labels‘是完全干净的,我的'df’是非常混乱的。我希望看到这样的df。

代码语言:javascript
复制
df = pd.DataFrame({'Year':[2020, 2020, 2019, 2019, 2019],
                    'Name':['Airport', 'University', 'Library', 'Theater', 'School']})
df

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-25 02:40:02

您可以使用df.str.extract和nan-replacement:

代码语言:javascript
复制
labels = ['Airport', 'Amusement', 'Bridge', 'Campus', 'Casino', 'Commercial', 'Concert', 'Convention', 
    'Education', 'Entertainment', 'Government', 'Hospital', 'Hotel', 'Library', 'Mall', 'Manufacturing',
    'Museum', 'Residential', 'Retail', 'School', 'University', 'Theater', 'Tunnel', 'Warehouse']
        
import pandas as pd

df = pd.DataFrame({
    'Year': [2020, 2020, 2019, 2019, 2019, 1954],
    'Name': ['Dulles_Airport', 'Syracuse_University', 'Reagan_Library', 'AMC Theater', 'Reagan High School', 'Shake, Rattle and Roll']
})

df['Match'] = df['Name'].str.extract(f"({'|'.join(labels)})")

生成的DataFrame将为

代码语言:javascript
复制
   Year                    Name       Match
0  2020          Dulles_Airport     Airport
1  2020     Syracuse_University  University
2  2019          Reagan_Library     Library
3  2019             AMC Theater     Theater
4  2019      Reagan High School      School
5  1954  Shake, Rattle and Roll         NaN

如果要保留不匹配的单元格,请执行以下操作:

代码语言:javascript
复制
df['Match'] = df['Name'].str.extract(f"({'|'.join(labels)})")
df.loc[df['Match'].isnull(), 'Match'] = df['Name'][df['Match'].isnull()]

生成的DataFrame将为

代码语言:javascript
复制
   Year                    Name                   Match
0  2020          Dulles_Airport                 Airport
1  2020     Syracuse_University              University
2  2019          Reagan_Library                 Library
3  2019             AMC Theater                 Theater
4  2019      Reagan High School                  School
5  1954  Shake, Rattle and Roll  Shake, Rattle and Roll

如果要删除不匹配的单元格,请执行以下操作:

代码语言:javascript
复制
df['Match'] = df['Name'].str.extract(f"({'|'.join(labels)})")
df = df.dropna()

生成的DataFrame将为

代码语言:javascript
复制
   Year                 Name       Match
0  2020       Dulles_Airport     Airport
1  2020  Syracuse_University  University
2  2019       Reagan_Library     Library
3  2019          AMC Theater     Theater
4  2019   Reagan High School      School
票数 2
EN

Stack Overflow用户

发布于 2021-06-25 02:27:50

这不是最纯粹的pandas答案,但您可以编写一个函数,根据标签列表检查字符串,并将其应用于Name列,即

代码语言:javascript
复制
def clean_labels(name):

  labels = ['Airport','Amusement','Bridge','Campus',
        'Casino','Commercial','Concert','Convention',
        'Education','Entertainment','Government','Hospital',
        'Hotel','Library','Mall','Manufacturing','Museum',
        'Residential','Retail','School','University',  'Theater',
        'Tunnel','Warehouse']
        
  for item in labels:
    if item in name:
      return item
代码语言:javascript
复制
>>> df.Name.apply(clean_labels)
0       Airport
1    University
2       Library
3       Theater
4        School

我假设在这里比较字符串时没有任何拼写错误,并且它将为任何不匹配的内容返回一个NoneType。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68120852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档