散景:列DataSource部分给出错误

时间:2019-01-13 22:19:59

标签: python bokeh

我正在尝试创建一个包含多个数据的交互式散景图,但不确定为什么会出现错误

ValueError:预期为ColumnData(String,Seq(Any))的元素,得到了{'x':6.794,'y':46.8339999999999,'country':'刚果,Dem。代表”,“流行”:3.5083789999999997,“地区”:“撒哈拉以南非洲”}

source = ColumnDataSource(data={
'x'       : data.loc[1970].fertility,
'y'       : data.loc[1970].life,
'pop'     : (data.loc[1970].population / 20000000) + 2,
'region'  : data.loc[1970].region,

})

我已经尝试通过从excel导入数据来尝试两个不同的数据集,并且在发生这种情况的原因方面一直没有问题。

here

4 个答案:

答案 0 :(得分:0)

顾名思义,ColumnDataSource是用于存储数据列的数据结构。这意味着.data中每个键的值都必须是一列,即Python列表,NumPy数组或Pandas系列。但是您正在尝试将纯数字指定为值,这就是错误消息告诉您的内容:

我正在尝试创建一个包含多个数据的交互式散景图,但不确定为什么会出现错误

  

期望ColumnData(String,Seq(Any))的元素

这表示可接受的期望值是将字符串映射到序列的命令。但是您通过的显然不是:

  

got {'x':6.794,'y':46.8339999999999,'country':'刚果民主共和国。代表”,“流行”:3.5083789999999997,“地区”:“撒哈拉以南非洲”}

例如x的值只是数字6.794,而不是数组或列表等。

答案 1 :(得分:0)

这将是一个解决方案。我认为问题在于从df中获取数据。

source = ColumnDataSource(data={
    'x'       : data[data['Year'] == 1970]['fertility'],
    'y'       : data[data['Year'] == 1970]['life'],
    'pop'     : (data[data['Year'] == 1970]['population']/20000000) + 2,
    'region'  : data[data['Year'] == 1970]['region']
})

答案 2 :(得分:0)

您可以轻松地做到这一点:

source = ColumnDataSource({str(c): v.values for c, v in df.items()})

答案 3 :(得分:0)

我在使用相同的数据集时遇到了同样的问题。 我的解决方案是使用“Year”作为索引列在 Pandas 中导入 csv。

data = pd.read_csv(csv_path,  index_col='Year')