【问题标题】:length mismatch in folium?叶的长度不匹配?
【发布时间】:2022-01-10 00:57:03
【问题描述】:

我正在编写一个 folium 地图,但我不断收到此错误。我是新手,老实说不知道如何解决这个问题。

import folium

geojson_map = 'https://raw.gituserhubcontent.com/dirkkoolmees/maps-import-export-of-fossil-fuels-/master/custom.geo.json'

world_map = folium.Map(location=[0,0], zoom_start = 1.5, tiles = 'CartoDB positron', min_zoom = 1, max_zoom = 6)

folium.Choropleth(
    geo_data = geojson_map,
    name = "chloropleth",
    data = df_clean,
    columns = [df.index, 'value'],
    key_on= 'feature.properties.name_sort',
    fill_color = 'Reds',
    fill_opacity = 0.9,
    line_opacity = 0.2,
    legend_name = 'GDP'
    ).add_to(world_map)

world_map

这是我收到的错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-31-b88f980d229d> in <module>()
     13     fill_color = 'Reds',
     14     fill_opacity = 0.9,
---> 15     line_opacity = 0.2,
     16     #legend_name = 'GDP'
     17     ).add_to(world_map)

1 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/frame.py in set_index(self, keys, drop, append, inplace, verify_integrity)
   4597                 # ensure_index_from_sequences would not raise for append=False.
   4598                 raise ValueError(
-> 4599                     f"Length mismatch: Expected {len(self)} rows, "
   4600                     f"received array of length {len(arrays[-1])}"
   4601                 )

ValueError: Length mismatch: Expected 154 rows, received array of length 324

有人知道如何解决这个问题吗?谢谢!

【问题讨论】:

  • 将两个调用分成两行
  • @MadPhysicist 我不肯定你的意思到底是什么。你能告诉我如何正确格式化吗?谢谢
  • folium.Choropleth(...).add_to(world_map) 分离成c = folium.Choropleth(...); c.add_to(world_map)
  • 这不是同一个错误,因为它现在告诉你哪个部分实际上导致了错误
  • 首先您可以使用print() 查看变量中的内容 - 以及数据的大小。即len(geojson_map)len(df_clean) - 可能其中一个的大小为 154 和其他 324,这可能会产生问题。或者也许问题使df.index

标签: python pandas folium choropleth


【解决方案1】:
  • 您的代码中有一些错误
    1. GitHub 的 URL 错误
    2. df_cleandf 均未定义
  • 修复这些问题后,代码就可以工作了,注意到您的 GeoJSON 中有 175 个几何图形
  • 不清楚您要达到什么目的,但这段代码可以工作。不知道为什么你使用 dfdf_clean 可以有不同的行数
import folium
import numpy as np
import pandas as pd

geojson_map = 'https://raw.githubusercontent.com/dirkkoolmees/maps-import-export-of-fossil-fuels-/master/custom.geo.json'

world_map = folium.Map(location=[0,0], zoom_start = 1.5, tiles = 'CartoDB positron', min_zoom = 1, max_zoom = 6)

# code is using two different dataframes! create them...
df_clean = pd.DataFrame(index=range(175), data={"value":np.linspace(1,5,175)})
df = pd.DataFrame(index=range(175))

folium.Choropleth(
    geo_data = geojson_map,
    name = "chloropleth",
    data = df_clean,
    columns = [df.index, 'value'],
    key_on= 'feature.properties.name_sort',
    fill_color = 'Reds',
    fill_opacity = 0.9,
    line_opacity = 0.2,
    legend_name = 'GDP'
    ).add_to(world_map)

world_map

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-23
    • 2018-04-28
    • 1970-01-01
    • 2018-02-22
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    相关资源
    最近更新 更多