2017-02-18 14 views
1

Я новичок в pandas и bokeh, и я пытаюсь создать график рассеяния из фреймворка pandas. Тем не менее, я получаю следующее сообщение об ошибке:Bokeh: AttributeError: объект 'DataFrame' не имеет атрибута 'tolist'

new_data[colname] = df[colname].tolist() 
AttributeError: 'DataFrame' object has no attribute 'tolist' 

Используя фиктивные данные из бока (от 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) 

Edit: Я не используя ToList(), но Scatter() из Bokeh делает и производит ошибку ниже.

+0

Не могли бы вы разместить образец своих данных, например: 'print (new_data.head (5))' и объяснить, каковы ваши столбцы 'X' и' Y'? – MaxU

+0

У этого есть более чем 50.000 колонок, поэтому это не очень легко сделать. Однако я получил его для работы, выполнив df = df.loc [:, ('type', 'tsneX', 'tsneY')]. Я не знаю, как это решает проблему, но она работает. – Jab

+1

Непонятно - в чем проблема с Bokeh? – MaxU

ответ

0

Я решил проблему первого извлечения соответствующих столбцов из dataframe.

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

scatter = Scatter(df, x='tsneX', y='tsneY', 
        color='type', marker='type', 
        title='t-sne', 
        legend=True) 
3

Вы используете 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 

Для выше dataframe, чтобы получить 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] 

Как вы уже пытались установить это в колонке нового dataframe, вы можете сделать:

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

> new_data 
     tsneY 
0 20.740931 
1 18.478468 
2 22.948167 
3 15.738954 
+0

@Jab Помогла ли эта проблема решить вашу проблему? – Chuck

Смежные вопросы