Python 3.x 按已在另一个数据帧中出现的值筛选数据帧
这不应该是一个困难的问题,但是我不确定为什么我尝试过的所有方法似乎都不起作用 基本上我有两个端口的数据帧,较大的一个大约有3600个端口,而另一个大约有660个。较小的数据帧只是从数据库查询返回的数据帧,以查看较大数据集中的哪些数据帧已经避免了冗余实体 因此,在本例中,它只是一个简单的过滤器,用于查看名称是否出现在两个数据帧中,并将其从大数据帧中删除。我已经参考了其他几个问题并尝试了修复,但我不确定它们为什么不起作用Python 3.x 按已在另一个数据帧中出现的值筛选数据帧,python-3.x,pandas,Python 3.x,Pandas,这不应该是一个困难的问题,但是我不确定为什么我尝试过的所有方法似乎都不起作用 基本上我有两个端口的数据帧,较大的一个大约有3600个端口,而另一个大约有660个。较小的数据帧只是从数据库查询返回的数据帧,以查看较大数据集中的哪些数据帧已经避免了冗余实体 因此,在本例中,它只是一个简单的过滤器,用于查看名称是否出现在两个数据帧中,并将其从大数据帧中删除。我已经参考了其他几个问题并尝试了修复,但我不确定它们为什么不起作用 Data frame 1 X Y
Data frame 1
X Y FID INDEX_NO REGION_NO PORT_NAME COUNTRY \
0 -124.066667 44.800000 1001 16835 16000 DEPOE BAY US
1 -124.050000 46.300000 1002 16838 16000 ILWACO US
2 -122.483333 37.500000 1003 16290 16000 PRINCETOWN US
3 -105.266667 20.616667 1004 15790 15700 PUERTO VALLARTA MX
4 -106.416667 23.200000 1005 15810 15700 MAZATLAN MX
Dataframe 2
eid name
0 AAAA Port of Manta
1 BBBB port of Antofagasta
2 CCCC port of IJmuiden
3 DDDD port of Augusta
4 EEEE port of Grimsby
我做了一些基本的字符串清理以避免任何意外,因此将两个端口功能的名称都小写
我尝试了两种过滤方法,它们只从DF1中取出660个端口中的大约77个。我认为最初的匹配情况很差,但检查excel中的名称,看看它们是否出现在两个数据帧中,就会发现所有660个都出现在两个数据帧中
# Method 1
world_ports['PORT_NAME'] = world_ports['PORT_NAME'].str.lower()
match_df = world_ports[~world_ports['PORT_NAME'].isin(port)]
# Method 2
count = 0
for a, b in existing_ports.iterrows():
count += 1
percentage = round(100 * (count / len(world_ports.PORT_NAME)), 2)
print('\rPercent Completed: ', percentage, '%', 'Search Term: ', b['name'], end='', flush=True)
n_name = b['name'].lower().replace('port', '').replace('of', '').strip() # tried this filter option
n_name = b['name'].lower() # tried this filter option
for c, d in world_ports.iterrows():
e_name = d['PORT_NAME'].lower().strip()
if n_name in e_name is True:
print('Matches: ', n_name, ': ', e_name)
world_ports = [~world_ports.PORT_NAME.isin(n_name)]
print(len(world_ports))
我尝试了isin()
,contains()
,但都不能正常工作
我还检查了一些端口是否包含像C这样的奇数字符ẩ博士ả Port
vsCam Pha Port
但我不知道如何用通用字母替换所有出现的字母,而不删除整个字符串