好吧,我在半智機的末端。我使用geopy對數據框進行地理編碼。我寫了一個簡單的函數來輸入國家名稱 - 並返回經度和緯度。我使用apply來運行該函數,並返回一個Pandas系列對象。我似乎無法將其轉換爲數據框。我敢肯定,我錯過了一些明顯的東西,但我對Python很陌生,仍然RTFMing。順便說一句,地理編碼器功能很好。Python Pandas'apply'returns系列;不能轉換爲數據幀
# Import libraries
import os
import pandas as pd
import numpy as np
from geopy.geocoders import Nominatim
def locate(x):
geolocator = Nominatim()
# print(x) # debug
try:
#Get geocode
location = geolocator.geocode(x, timeout=8, exactly_one=True)
lat = location.latitude
lon = location.longitude
except:
#didn't work for some reason that I really don't care about
lat = np.nan
lon = np.nan
# print(lat,lon) #debug
return lat, lon # Note: also tried return { 'LAT': lat, 'LON': lon }
df_geo_in = df_addr.drop_duplicates(['COUNTRY']).reset_index() #works perfectly
df_geo_in['LAT'], df_geo_in['LON'] = df_geo_in.applymap(locate)
# error: returns more than 2 values - default index + column with results
我也試過
df_geo_in['LAT','LON'] = df_geo_in.applymap(locate)
我得到一個數據幀,沒有指標,並在它的系列單colume。
我已經嘗試了許多其它方法,包括「applymap」:
source_cols = ['LAT','LON']
new_cols = [str(x) for x in source_cols]
df_geo_in = df_addr.drop_duplicates(['COUNTRY']).set_index(['COUNTRY'])
df_geo_in[new_cols] = df_geo_in.applymap(locate)
其中長的時間後返回錯誤:
ValueError: Columns must be same length as key
我也嘗試手動轉換使用df.from_dict(df_geo_in)
方法將數據序列轉換爲數據幀,但沒有成功。
目標是對166個獨特國家進行地理編碼,然後將其加入df_addr中的188K地址。我試圖在我的代碼中擔任pandas-y,如果可能的話不要寫循環。但我還沒有找到將系列轉換爲數據框的魔力,這是我第一次嘗試使用apply。
在此先感謝 - 古老的C程序員
什麼類型(df_geo_in)在不同點說?它是一個數據幀嗎?或一系列?無論如何,你可能想要df_geo_in.fromdict()? df沒有意義,除非你定義了它..你可能需要pd.DataFrame(df_geo_in) – dartdog 2015-03-31 02:46:58