2016-10-03 3 views
0

J'essaie de fusionner une structure de données pandas et une géodonnées de géopandas en utilisant un attribut joint. J'utilise un fichier de forme des comtés américains (https://geonet.esri.com/thread/24614 première réponse) et un fichier csv (http://water.usgs.gov/watuse/data/2010/index.html le premier format Excel puis enregistré en tant que csv). Une fois que les données sont jointes en utilisant FIPS, j'essaie d'imprimer la nouvelle image, mais seulement les en-têtes s'impriment avec le message Empty GeoDataFrame ci-dessus. Voici le code que je utiliseGeoDataFrame vide lors de l'utilisation de .merge GeoPandas

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) 

ne devrait pas l'GeoDataFrame ont les données des deux objets étant fusionnés? Je voudrais faire une cartes Choropleth pour les eaux de surface fraîches se retire. Désolé, si nous ne sommes pas supposés lister les données que nous utilisons, je voulais être aussi précis que possible. Je suis nouveau sur python alors je m'excuse si c'est une question simple, mais google et une recherche sur ce site ne montrent pas les questions similaires qui ont été répondues

Répondre

0

Juste vérifié votre problème. D'après ce que je vois, le problème était que les colonnes que vous essayiez de fusionner sur l'emplacement de deux types de données différents. Votre colonne dans l'ensemble de données de comtés était d'un objet de type (par exemple, il contenait des chaînes) tandis que le df2 ["FIPS"] était de type "int64". C'est ce que j'ai fait, et le travail de fusion. Toujours lui donner un contrôle pour voir si la fusion a été effectuée de manière appropriée:

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") 
+0

Oui c'est la solution, merci. Au premier coup d'œil, tout semble avoir été fusionné correctement. Merci beaucoup pour votre réponse rapide. –