Python ValueError:未处理的对象<_io.TextIOWrapper name=';json';模式=';r';编码=';utf-8-sig'&燃气轮机;

Python ValueError:未处理的对象<_io.TextIOWrapper name=';json';模式=';r';编码=';utf-8-sig'&燃气轮机;,python,geojson,Python,Geojson,我正在尝试使用GeoJson多边形颜色功能更改一个国家的颜色 这是给我一个错误的代码 import folium import pandas data = pandas.read_csv("Volcanoes_USA.txt") lat = list(data["LAT"]) lon = list(data["LON"]) elev = list(data["ELEV"]) def color_producer(elevation): if elevation < 1000:

我正在尝试使用GeoJson多边形颜色功能更改一个国家的颜色

这是给我一个错误的代码

import folium
import pandas

data = pandas.read_csv("Volcanoes_USA.txt")
lat = list(data["LAT"])
lon = list(data["LON"])
elev = list(data["ELEV"])

def color_producer(elevation):
    if elevation < 1000:
        return 'green'
    elif 1000 <= elevation < 3000:
        return 'orange'
    else:
        return 'red'

map = folium.Map(location=[38.58,-99.09], zoom_start=6, tiles="Mapbox Bright")

fg = folium.FeatureGroup(name="My Map")

for lt,ln,el in zip(lat, lon, elev):
    fg.add_child(folium.CircleMarker(location=[lt, ln], radius = 6, popup=str(el)+ " m", color = color_producer(el), fill_color= 'grey', fill_opacity=1.15))

fg.add_child(folium.GeoJson(data=open('world.json','r', encoding='utf-8-sig'),
style_function = lambda x: {'fillColour':'yellow'}))
importfolium
进口大熊猫
data=pandas.read\u csv(“火山”\u USA.txt)
lat=列表(数据[“lat”])
lon=列表(数据[“lon”])
elev=列表(数据[“elev”])
def颜色发生器(立面图):
如果标高<1000:
返回“绿色”
elif 1000>回溯(最近一次调用last):文件“map1.py”,第25行,在
>style_function=lambda x:{'fillcolor':'yellow'})文件“/Users/g_wauns/anaconda3/lib/python3.6/site packages/folium/features.py”,
>第495行,在_init中__
>raise VALUERROR('Unhandled object{!r}.'.format(data))VALUERROR:Unhandled object mode='r'encoding='utf-8-sig'>。
因为我对编码是新手,所以我不知道这意味着什么。

现在看(),看起来像是
folium。GeoJson
构造函数只能处理(针对您的场景)以下两种情况之一:

  • 文件名
  • Python字典
  • 因此,解决这个问题的最简单方法就是传递文件名:

    fg.add_child(folium.GeoJson("world.json", style_function=lambda x: {"fillColour": "yellow"}))
    

    当然,您可以自己将文件读入dict(使用模块),但这正是上面的文件在下面20行中所做的。

    我用下面代码块中的代码解决了上面完全相同的问题

    import folium
    import pandas
    import json
    
    data = pandas.read_csv("Volcanoes_USA.csv")
    
    我必须创建以下行作为str函数,以使代码正常工作 正确读取world.json文件。本课程中的例子并非如此 为我工作。因此,我必须导入json库并读取该文件 首先使用编码,然后将其传递给GeoJson方法 在下面的代码中进一步描述

    data_json = open("world.json", 'r', encoding='utf-8-sig').read()
    
    lat = list(data["LAT"])
    long = list(data["LON"])
    elev = list(data["ELEV"])
    name = list(data["NAME"])
    
    def pin_color(elev):
        if elev <= 1500.0:
            return "green"
        elif elev >= 3000.0:
            return "red"
        else:
            return "orange"
    
    map = folium.Map(location=[38.58,-99.09], zoom_start=6, control_scale=True,
    tiles="Stamen Terrain")
    map.add_child(folium.LatLngPopup())
    map
    
    fg = folium.FeatureGroup(name="my_map")
    
    data\u json=open(“world.json”,“r',encoding='utf-8-sig')。read()
    lat=列表(数据[“lat”])
    长=列表(数据[“LON”])
    elev=列表(数据[“elev”])
    名称=列表(数据[“名称”])
    def引脚颜色(elev):
    如果elev=3000.0:
    返回“红色”
    其他:
    返回“橙色”
    map=folium.map(位置=[38.58,-99.09],缩放开始=6,控制比例=真,
    tiles=“雄蕊地形”)
    map.add_child(folium.LatLngPopup())
    地图
    fg=folium.FeatureGroup(name=“我的地图”)
    
    我无法使用课程中解释的线路,原因是: fg.add_child(folium.GeoJson(data=open('world.json','r',encoding=utf-8-sig))) 因此,我在上面的代码中将data_json定义为下面要读取的str 由folium.GeoJson编写

    fg.add_child(folium.GeoJson(data=data_json,
    style_function=lambda x: {'fillColor':'green' if x['properties'] 
    ['POP2005'] < 10000000
    else 'orange' if 10000000 <= x['properties']['POP2005'] < 20000000 else 
    'red' }))
    
    for i,j,z,v in zip(lat, long, elev, name):
        icn_pin=folium.Popup(str(v)+" Volcano"+": "+"Elevation:"+str(z)+"m "+" 
        "+"Lat:"+str(i)+" "+"Long:"+str(j),parse_html=True)
        fg.add_child(folium.CircleMarker(location=[i,j], popup=icn_pin, 
        radius=7, fill=True, color=pin_color(z), fill_color=pin_color(z), 
        fill_opacity=0.85))
    
    map.add_child(fg)
    map.save("world_pop_map.html")
    
    fg.add_child(folium.GeoJson(data=data_json,
    style_function=lambda x:{'fillColor':'green'如果x['properties']
    ['POP2005']<10000000
    
    else'orange'if 10000000如用户9608587所示,它帮助我了解了如何完成此任务

    我导入了“io”模块并使用了io.open()函数

    import io
    data_json = io.open("world.json",'r',encoding='utf-8-sig').read()
    
    最后的代码,你可以复制粘贴它,它会工作的

    import folium
    import pandas,io
    
    data = pandas.read_csv("Volcanoes_USA.txt")
    data_json = io.open("world.json",'r',encoding='utf-8-sig').read()
    lat = list(data.LAT)
    lon = list(data.LON)
    elev = list(data.ELEV)
    
    def colour_producer(elev):
        if elev<1000:
            return "green"
        elif 1000<= elev <3000:
            return "orange"
        else:
            return "red"
    
    Map = folium.Map(location=[38.58,-99.09],zoom_start=6,tiles = "Mapbox Bright")
    fg = folium.FeatureGroup(name="My Map")
    
    '''for lat,lon,elev in zip(lat,lon,elev):
        fg.add_child(folium.CircleMarker(location=[lat,lon],popup=str(elev) + "m",radius
        = 6,fill_color = colour_producer(elev),
        color = 'grey',fill_opacity = 0.7))'''
    
    fg.add_child(folium.GeoJson(data=data_json,style_function=lambda x: {'fillColor':'blue' if x['properties']
    ['POP2005'] < 10000000
    else 'green' if 10000000 <= x['properties']['POP2005'] < 20000000 else
    'red' }))
    
    
    Map.add_child(fg)
    Map.save("Map1.html")
    
    importfolium
    进口大熊猫
    data=pandas.read\u csv(“火山”\u USA.txt)
    data_json=io.open(“world.json”,'r',encoding='utf-8-sig').read()
    lat=列表(data.lat)
    lon=列表(data.lon)
    elev=列表(data.elev)
    def颜色发生器(elev):
    如果elev只需为数据添加
    read()

    fg.add_child(folium.GeoJson(data=open('world.json', 'r', encoding='utf-8-sig').read(), style_function=lambda x: {'fillColor':'yellow'}))
    

    这对我来说是个好办法

    fg.add_child(folium.GeoJson(data=(open)(“world.json”,“r”,encoding=(“utf-8-sig”)))).read())

    这个问题的确切答案已经发布了。下次请解释一下为什么你的答案是正确的。
    fg.add_child(folium.GeoJson(data=open('world.json', 'r', encoding='utf-8-sig').read(), style_function=lambda x: {'fillColor':'yellow'}))