我正在尝试使用属性连接合并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的新手,所以如果这是一个简单的问题,我很抱歉,但谷歌和本网站上的搜索没有显示已经回答的类似问题
答案 0 :(得分: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")