Bokeh:AttributeError:'DataFrame'对象没有属性'tolist'

Jab*_*Jab 5 python pandas bokeh

我是熊猫和散景的新手,我正在尝试从熊猫数据框创建一个散点图.但是,我不断收到以下错误:

new_data[colname] = df[colname].tolist()
AttributeError: 'DataFrame' object has no attribute 'tolist' 
Run Code Online (Sandbox Code Playgroud)

使用散景中的虚拟数据(来自bokeh.sampledata.iris导入花作为数据),散射效果很好.

   type   tsneX      tsneY      +50.000 columns
0  A      53.828863  20.740931  
1  B      57.816909  18.478468  
2  A      55.913429  22.948167  
3  C      56.603005  15.738954 


scatter = Scatter(df, x='tsneX', y='tsneY',
                  color='type', marker='type',
                  title='t-sne',
                  legend=True)
Run Code Online (Sandbox Code Playgroud)

编辑:我没有使用tolist(),但是散景的Scatter()会产生并产生下面的错误.

Chu*_*uck 12

您使用tolist不当.你想要:.values接下来tolist()

  type   tsneX      tsneY  
0  A      53.828863  20.740931  
1  B      57.816909  18.478468  
2  A      55.913429  22.948167  
3  C      56.603005  15.738954 
Run Code Online (Sandbox Code Playgroud)

对于上面的数据框,要将X和Y值作为列表获取,您可以执行以下操作:

tsneY_data = df['tsneY'].values.tolist()
>> [20.740931, 18.478468, 22.948167, 15.7389541]

tsneX_data = df['tsneX'].values.tolist()
>> [53.828863, 57.816909, 55.913429, 56.603005]
Run Code Online (Sandbox Code Playgroud)

当您尝试将其设置为新数据帧的列时,您可以执行以下操作:

new_data = pd.DataFrame()
new_data['tsneY'] = df['tsneY'].values.tolist()

> new_data
       tsneY
0  20.740931
1  18.478468
2  22.948167
3  15.738954
Run Code Online (Sandbox Code Playgroud)

  • @NicholasHumphrey `tolist()` 仅作用于 numpy 数组。`df['A']` 是一个 pandas 系列对象,因此您必须首先使用 `.values` 将其转换为一个 numpy 对象。 (2认同)
  • df['A'].tolist() 在当前的 pandas 中确实适用于一系列,而不仅仅是 numpy。鉴于下面的解决方案@Jab文档,他的问题可能是原始 df 中具有相同名称的 2 列。这也会产生相同的 .tolist() 错误,并且不能通过添加 .values 来解决 (2认同)

Jab*_*Jab 0

我通过首先从数据框中提取相关列来解决这个问题。

df = df.loc[:, ('type', 'tsneX', 'tsneY')

scatter = Scatter(df, x='tsneX', y='tsneY',
                  color='type', marker='type',
                  title='t-sne',
                  legend=True)
Run Code Online (Sandbox Code Playgroud)