从 csv 中读取值,然后使用 python 将它们放入字符串中
Reading values from a csv, then putting them in a string using python
我有一份包含多伦多房地产信息的电子表格 - 其中包括该地区公寓的纬度和经度。事实上,它甚至有一个包含纬度和经度的列。我想做的是将这些坐标放在地图上,可能带有 folium(但我愿意接受其他选择)。据我所知,folium 使用以下格式:
map_1 = folium.Map(location=[45.372, -121.6972],
zoom_start=12,
tiles='Stamen Terrain')
folium.Marker([45.3288, -121.6625], popup='Mt. Hood Meadows').add_to(map_1)
folium.Marker([45.3311, -121.7113], popup='Timberline Lodge').add_to(map_1)
map_1
据我所知,我需要做两件事:
1) 用以下内容生成足够数量的行:folium.Marker([x, y]).add_to(map_1)
2) 用电子表格中的 lat/long 值填写 x 和 y
到目前为止,我已经能够从 csv 中提取 lat/long 列,但就我所知:
import pandas as pd
import folium
df_raw = pd.read_excel('df_condo_v9_t1.xlsx', sheetname=0, header=0)
df_raw.shape
df_raw.dtypes
df_lat = df_raw['Latlng']
df_lat.head()
如果您真的需要查看 csv,请访问:https://github.com/vshideler/toronto-condos
如有任何建议,我们将不胜感激!
如果您将来要更多地使用此类数据,我强烈建议您通读 pandas documentation. This includes a 10 minute "getting started" guide,其中涵盖了许多常见用例,包括非常相似的示例到这个。
话虽如此,您在上面提供的代码中已经拥有了所需的大部分组件。我看到的两个问题如下:
如果您查看 DataFrame 的数据类型(上面代码中的 df_raw.dtypes
),您会发现 Latlng 列实际上是仍然是一个字符串,而 Pandas 已经帮助您将 Latitude 和 Longitude 列转换为浮点数。这应该告诉您使用这两个可能更容易,因为它们可以直接用于定位您的标记。
您可能需要稍微配置一下您的地图 - 您从示例代码中获取的默认设置创建了一个以俄勒冈州某处为中心的地形图。鉴于您正在多伦多规划房产 - 这些似乎都不是好的选择。我通常喜欢将我的地图居中于我的数据的平均点。
一个使事情正常运行的简单示例如下所示:
import pandas as pd
import folium
df = pd.read_csv("df_condo_v9_t1.csv")
map_center = [df["Latitude"].mean(), df["Longitude"].mean()]
map_1 = folium.Map(location=map_center, zoom_start=16)
for i, row in df[["Latitude", "Longitude"]].dropna().iterrows():
position = (row["Latitude"], row["Longitude"])
folium.Marker(position).add_to(map_1)
map_1
我有一份包含多伦多房地产信息的电子表格 - 其中包括该地区公寓的纬度和经度。事实上,它甚至有一个包含纬度和经度的列。我想做的是将这些坐标放在地图上,可能带有 folium(但我愿意接受其他选择)。据我所知,folium 使用以下格式:
map_1 = folium.Map(location=[45.372, -121.6972],
zoom_start=12,
tiles='Stamen Terrain')
folium.Marker([45.3288, -121.6625], popup='Mt. Hood Meadows').add_to(map_1)
folium.Marker([45.3311, -121.7113], popup='Timberline Lodge').add_to(map_1)
map_1
据我所知,我需要做两件事:
1) 用以下内容生成足够数量的行:folium.Marker([x, y]).add_to(map_1)
2) 用电子表格中的 lat/long 值填写 x 和 y
到目前为止,我已经能够从 csv 中提取 lat/long 列,但就我所知:
import pandas as pd
import folium
df_raw = pd.read_excel('df_condo_v9_t1.xlsx', sheetname=0, header=0)
df_raw.shape
df_raw.dtypes
df_lat = df_raw['Latlng']
df_lat.head()
如果您真的需要查看 csv,请访问:https://github.com/vshideler/toronto-condos
如有任何建议,我们将不胜感激!
如果您将来要更多地使用此类数据,我强烈建议您通读 pandas documentation. This includes a 10 minute "getting started" guide,其中涵盖了许多常见用例,包括非常相似的示例到这个。
话虽如此,您在上面提供的代码中已经拥有了所需的大部分组件。我看到的两个问题如下:
如果您查看 DataFrame 的数据类型(上面代码中的
df_raw.dtypes
),您会发现 Latlng 列实际上是仍然是一个字符串,而 Pandas 已经帮助您将 Latitude 和 Longitude 列转换为浮点数。这应该告诉您使用这两个可能更容易,因为它们可以直接用于定位您的标记。您可能需要稍微配置一下您的地图 - 您从示例代码中获取的默认设置创建了一个以俄勒冈州某处为中心的地形图。鉴于您正在多伦多规划房产 - 这些似乎都不是好的选择。我通常喜欢将我的地图居中于我的数据的平均点。
一个使事情正常运行的简单示例如下所示:
import pandas as pd
import folium
df = pd.read_csv("df_condo_v9_t1.csv")
map_center = [df["Latitude"].mean(), df["Longitude"].mean()]
map_1 = folium.Map(location=map_center, zoom_start=16)
for i, row in df[["Latitude", "Longitude"]].dropna().iterrows():
position = (row["Latitude"], row["Longitude"])
folium.Marker(position).add_to(map_1)
map_1