2017-07-31 42 views
-1

所以我试图通过一个使用熊猫的CSV文件来组织数据,所以我可以在matplotlib中绘制它,我有不同的值行,其中一些控制和其他实验。我能够将行分隔为图表,但我似乎无法使它工作,我试图用循环(见下面)来绘制图表,尽管我一直在获取'TypeError:'类型的'对象不是可代码化的'。按字符串值定义的组对CSV数据进行分类

import pandas as pd 
import numpy as np 
import matplotlib as plt 

df = pd.read_csv('C:\\Users\\User\\Desktop\\Ubiome samples\\samples.csv') 

group = (df['Group']) 
count = (df['Count']) 
time = (df['Time']) 

for steps in range [group]: 
    plt.plot([time],[count],'bs') 
    plt.show() 
+2

这个特殊的错误来自'range [group]'。调用range的正确方法是'range(n)',其中'n'是一个整数。 [请参阅文档。](https://docs.python.org/3.6/library/stdtypes.html#range)您可能还有其他问题。如需更多帮助,请考虑提供几行代码,使我们可以使用数据框。 – saintsfan342000

回答

2

。在你的for循环一个错字:

for steps in range [group]: 

应该

for steps in range(group): 

您的循环试图调用__getitem__range,但由于这种方法没有定义对于range,你会得到一个TypeError: 'type' object is not subscriptable。查询python documentation for getitem()了解更多详情。

但是,您不能在熊猫Series上使用range来循环其中的每个项目,因为range在输入时需要整数。相反,你应该使用:

for steps in group: 

这将循环遍历CSV文件的每一行,并输出每行的完全一样的情节。我很确定这不是你真正想要做的。

如果我很好地理解你的问题,你想绘制你在csv中的每组实验/控制值。

那么你应该尝试(未经测试):在本集团列的每一块数据的

import pandas as pd 
import numpy as np 
import matplotlib as plt 

df = pd.read_csv('C:\\Users\\User\\Desktop\\Ubiome samples\\samples.csv') 

for group in df['Group'].unique(): 
    group_data = df[df['Group'] == group] 
    plt.plot(group_data['Time'], group_data['Count'], 'bs') 
    plt.show() 

for group in df['Group'].unique()将循环,忽略重复。例如,如果你的列中有1000个字符串,但所有这些字符串都是“实验”或“控制”,那么这将循环超过['experimental', 'control'](实际上是一个numpy数组,也请注意unique()不排序,所以输出的顺序取决于输入的顺序)。

df[df['Group'] == group]将选择列'组'等于组的所有行。 查询pandas documentation for where method and masking了解更多详情。

+0

非常感谢您回答我的问题,并且链接更有帮助,但是您是否知道如何使它们成为单个图表? – tms

+0

如果你只需要一个图表,那么不要在循环中执行'plt.show()',而是在循环之后执行。 – Unatiel

相关问题