这不应该是一个难题,但是我不确定为什么我尝试的所有方法似乎都不起作用。
基本上,我有2个端口的数据帧,一个较大的端口大约有3600个端口,而另一个大约有660个端口。较小的数据帧只是从数据库查询中返回的数据帧,以查看我已经在较大的数据集中找到了哪些必须避免冗余实体。
因此,在这种情况下,这只是一个简单的过滤器,以查看该名称是否出现在两个数据帧中,将其从大数据框中删除。我引用了其他几个问题并尝试了修复程序,但不确定为什么它们不起作用。
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ẩm Phả Port
和Cam Pha Port
之类的奇数字符,但是我不知道如何在不删除整个字符串的情况下用通用字母替换所有这些字母。