在python中编码很新,但我试图理解如何将数据帧中的值转换为没有该结构的简单值。我这样做是因为我从SQL中提取了一个值并将其传递给不接受数据帧的函数,但我的SQL查询结果卡在数据帧中。
以下详细信息:
我运行了两个查询来从数据表中提取第一个纬度和经度值。
nyc= bq_helper.BigQueryHelper(active_project= "bigquery-public-data",
dataset_name = "new_york")
query_lat = """
SELECT latitude from `bigquery-public-data.new_york.citibike_stations`
limit 1
"""
query_long = """
SELECT longitude from `bigquery-public-data.new_york.citibike_stations`
limit 1
"""
然后我将查询结果分配给lat和long变量
lat = nyc.query_to_pandas_safe(query_lat)
long = nyc.query_to_pandas_safe(query_long)
我想将这些传递给folium映射函数
map_hooray = folium.Map(location=[lat, long],
zoom_start =11)
但是,我得到一个错误,即folium函数不接受数据帧。
如何将数据框中的值转换为可以传递给folium函数的简单值?
我在Kaggle的Jupyter笔记本中使用python进行工作
非常感谢你的帮助!
答案 0 :(得分:1)
对于您的目的,我不确定您是否需要使用Pandas数据帧。
类似的东西:
lat = query_lat.fetchone()
long = query_long.fetchone()
map_hooray = folium.Map(location=[lat[0], long[0]], zoom_start =11)
可能适合你。 当然,除非您需要将数据帧用于其他目的。
答案 1 :(得分:0)
没有更多信息我不确定如何回答您的具体问题,但您可以使用iloc获取特定值。
df.iloc[1,3]
但是,对于您的情况,迭代行或列并提取每行的特定值可能更有帮助,因为如果在数据帧中返回多个值,则可能会返回多个值。
df = lat.merge(long, left_index = True, right_index = True)
map_hooray = []
for key, row in df.iterrows():
long = row['long']
lat = row['lat']
map_hooray.append(folium.Map(locations = [lat, long], zoom_start = 11))
合并后甚至更好:
df['Map'] = df.apply(lambda x: folium.Map(locations = [x['lat'], x['long']], zoom_start = 11))