在pandas数据帧中迭代带有for循环的列

时间:2016-07-01 19:23:58

标签: python pandas dataframe bokeh

我正在尝试从CSV文件中读取数据帧,并为数据框中的每个列生成散点图。例如,我在FULL_NAME ----------------------- John D Smith Mary Ann Loury Chris Robson III Greg Z. Olson Jr. Helen Webb-Hunt

中阅读了以下内容
df=pandas.readcsv()

我想使用sample作为x值以及每列的区域生成散点图。

我使用以下代码与bokeh.plotting手动绘制每一列

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

这会成功生成散点图,但我想创建一个循环来为每列生成散点图。在我的完整数据集中,我想要绘制超过500列。

我已经按照df.iteritems和df.itertuples的参考来迭代数据帧,但我不知道如何获得我想要的输出。

我尝试了以下内容:

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)

我马上发现错误:

  

引发KeyError('%s不在索引'%objarr [mask] KeyError:“['1A''1B'   '2A''2B']不在索引

任何指导?提前谢谢。

1 个答案:

答案 0 :(得分:2)

iteritems遍历列,而不是行。但是,当您尝试df[row]而不是df[index]时,您的真正问题就在于此。我将措辞切换到列并执行此操作:

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