2016-10-03 20 views
0

属性結合を使用して、pandasデータフレームとgeopandas geodataframeをマージしようとしています。私は米国の郡の形状ファイル(https://geonet.esri.com/thread/24614最初の応答)とcsvファイル(http://water.usgs.gov/watuse/data/2010/index.htmlの最初のExcel形式をcsvとして保存しています)を使用しています。データフレームがFIPSを使用して結合されたら、私は新しいジオデータフレームを印刷しようとしますが、ヘッダーだけが上のEmpty GeoDataFrameというメッセージで表示されます。ここに私が使用しているコードはあります.merge GeoPandasを使用すると空の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

あなたの問題をちょうどチェックしました。私が見るところでは、2つの異なるデータ型のどこにマージしようとしていた列が問題でした。 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") 
+0

はい、解決策です、ありがとうございます。一見すると、すべてが正しくマージされたように見えます。迅速な返信をありがとうございました。 –

関連する問題