2016-07-01 3 views
1

Я пытаюсь взять данные в формате CSV и генерировать графики разброса для каждого столбца в кадре данных. Например, я прочитал в следующем с df=pandas.readcsv()Итерация по столбцам с петлями в pandas dataframe

Sample AMP ADP ATP 
1A  239847 239084 987374 
1B  245098 241210 988950 
2A  238759 200554 921032 
2B  230029 215408 899804 

Я хотел бы генерировать график рассеяния с использованием образца в качестве значений х, и области для каждого из столбцов.

Я использую следующий код с bokeh.plotting для построения каждого столбца вручную

import pandas 
from bokeh.plotting import figure, show 

df = pandas.read_csv("data.csv") 
p = figure(x_axis_label='Sample', y_axis_label='Peak Area', x_range=sorted(set(df['Sample']))) 
p.scatter(df['Sample'], df['AMP']) 
show(p) 

Это создает разброс участки успешно, но я хотел бы создать цикл для генерации графика рассеяния для каждого столбца. В моем полном наборе данных у меня есть более 500 столбцов, которые я хотел бы построить.

Я воспользовался ссылками для использования df.iteritems и df.itertuples для итерации через dataframes, но я не уверен, как получить результат, который я хочу.

Я попытался следующие:

for index, row in df.iteritems(): 
    p = figure() 
    p.scatter(df['Sample'], df[row]) 
    show(p) 

Я ударил ошибку сразу:

raise KeyError('%s not in index' % objarr[mask] KeyError: "['1A' '1B' '2A' '2B'] not in index

Любое руководство? Заранее спасибо.

ответ

0

iteritems Итерирует по столбцам, а не по строкам. Но ваша реальная проблема заключается в том, что вы пытаетесь сделать df[row] вместо df[index]. Я бы переключил формулировку на колонны и сделаю следующее:

for colname, col in df.iteritems(): 
p = figure() 
p.scatter(df['Sample'], df[colname]) 
show(p)