首页 > 解决方案 > Geopandas .merge() 产生奇怪的结果

问题描述

我一直在尝试基于列合并两个 geopandas 数据框,并且得到了一些非常奇怪的结果。为了测试这一点,我制作了两个简单的数据框,并将它们合并:

import pandas as pd
import geopandas as gpd

df = pd.DataFrame(
    {'City': ['Buenos Aires', 'Brasilia', 'Santiago', 'Bogota', 'Caracas'],
     'Country': ['Argentina', 'Brazil', 'Chile', 'Colombia', 'Venezuela'],
     'Latitude': [-34.58, -15.78, -33.45, 4.60, 10.48],
     'Longitude': [-58.66, -47.91, -70.66, -74.08, -66.86]})

gdf = gpd.GeoDataFrame(
    df, geometry=gpd.points_from_xy(df.Longitude, df.Latitude))

df2 = pd.DataFrame(
    {'Capital': ['Buenos Aires', 'Brasilia', 'Santiago', 'Bogota', 
     'Caracas'],
     'Abbreviation': ['ARG', 'BRA', 'CHI', 'COL', 'VZL']})

combined_df = gdf.merge(df2, left_on='City', right_on='Capital')

print(combined_df)

当我打印结果时,我得到了我的预期:

           City    Country  ...       Capital  Abbreviation
0  Buenos Aires  Argentina  ...  Buenos Aires           ARG
1      Brasilia     Brazil  ...      Brasilia           BRA
2      Santiago      Chile  ...      Santiago           CHI
3        Bogota   Colombia  ...        Bogota           COL
4       Caracas  Venezuela  ...       Caracas           VZL

这两个数据集基于它们的共同列合并,即“城市”列和“资本”列。

我还有其他一些我正在使用的数据。这是它的链接

这两个文件都是我作为地理数据框读入的地理包。数据框 1 有 16166 行。数据框 2 有 15511 行。它们有一个共同的 ID 列,“ALTPARNO”和“altparno”。这是我试图用来读入和合并它们的代码:

import geopandas as gpd

dataframe1 = gpd.read_file(filepath, layer='allkeepers_2019')
dataframe2 = gpd.read_file(filepath, layer='keepers_2019')

results = dataframe1.merge(dataframe2, left_on='altparno', right_on='ALTPARNO')

当我查看我的结果时,我有一个包含超过 400 万行的数据框(应该在 15,000 左右)。

到底是怎么回事?

标签: pythonpandasgeopandas

解决方案


推荐阅读