0

我正在尝试通过使用属性连接来合并 pandas 数据框和 geopandas 地理数据框。我正在使用美国县形状文件(https://geonet.esri.com/thread/24614第一响应)和 csv 文件(http://water.usgs.gov/watuse/data/2010/index.html然后将第一个 Excel 格式保存为 csv)。通过使用 FIPS 连接数据帧后,我会尝试打印新的地理数据帧,但只有标题会打印上面的 Empty GeoDataFrame 消息。这是我正在使用的代码

from matplotlib import pyplot as plt
import csv 
import numpy as np
import datetime
import pandas as pd
import geopandas as gpd
import csv
from shapefile import Reader 

df1 = pd.read_csv('usco2010.csv') 
#Reads csv file and puts it into a dataframe
df2 = pd.DataFrame({'STATE':df1['STATE'],'COUNTY':df1['COUNTY'],'FIPS':df1['FIPS'],'Se    rPop10^3':df1['TP-TotPop'],'WtrWthdrwl_MGD':df1['PS-WSWFr']})  
#Takes the data we want from df1 and creates a new dataframe df2: Statename, County name, FIPS, Served Population in 1000s, Surface water withdrawls in MGD 


counties = gpd.read_file('UScounties') 
#creates a GeoDataFrame for the US counties by using UScounties shapefile

print(counties.head())
print(df2.head())

counties = counties.merge(df2, on='FIPS') #Empty GeoDataFrame
#merges counties and df2 with same FIPS

print(counties)

GeoDataFrame 不应该合并来自两个对象的数据吗?我想为新鲜的地表水提取制作一个 Choropleth 地图。

抱歉,如果我们不打算列出我们使用的数据,我想尽可能具体。我是 python 新手,所以如果这是一个简单的问题,我深表歉意,但是谷歌和在这个网站上的搜索没有显示已经回答的类似问题

4

1 回答 1

1

刚刚检查了你的问题。据我所知,问题在于您尝试合并的列在两种不同数据类型的位置。您在县数据集中的列属于对象类型(例如,它包含字符串),而 df2["FIPS"] 属于“int64”类型。这就是我所做的,并且合并工作。仍然检查一下合并是否正确执行:

us_data = pd.read_csv('usco2010.csv') 
counties = gp.read_file('UScounties.shp') 
counties["FIPS"] = counties["FIPS"].astype(int)
pd.merge(counties, us_data, on="FIPS")
于 2016-10-04T11:34:44.623 回答