【问题标题】:Categorizing CSV data by groups defined through string values按通过字符串值定义的组对 CSV 数据进行分类
【发布时间】:2018-01-07 15:12:01
【问题描述】:

所以我正在尝试使用 pandas 通过 CSV 文件组织数据,以便可以在 matplotlib 中绘制它,我有不同的值行,其中一些是控制的,而另一些是实验性的。我可以将行分开以绘制图表,但我似乎无法使其工作,我尝试使用 for 循环(见下文)绘制图表,尽管我不断收到“TypeError:'type' object is not subscriptable”。

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()

【问题讨论】:

  • 此特定错误来自range [group]。调用范围的正确方法是range(n),其中n 是一个整数。 See the documentation.你可能还有其他问题。如需更多帮助,请考虑提供几行代码,为我们提供可使用的数据框。

标签: python pandas matplotlib data-analysis


【解决方案1】:

你的 for 循环中有一个错字:

for steps in range [group]:

应该是

for steps in range(group):

您的 for 循环尝试在 range 上调用 __getitem__,但由于没有为 range 定义此方法,因此您会得到一个 TypeError: 'type' object is not subscriptable。更多详情请查看python documentation for getitem()

但是,您不能在 pandas 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() 将遍历 Group 列中的每条数据,忽略重复项。 例如,如果您的列中有 1000 个字符串,但所有这些字符串都是“实验”或“控制”,那么这将循环 ['experimental', 'control'](实际上是一个 numpy 数组,请注意 unique() 不'不排序,所以输出的顺序取决于输入的顺序)。

df[df['Group'] == group] 然后将选择列“组”等于组的所有行。 更多详情请查看pandas documentation for where method and masking

【讨论】:

  • 感谢您很好地回答了我的问题,并且链接帮助更多,但是您知道如何将它们制作成单个图表吗?
  • 如果你只想要一张图,那么不要在循环中执行plt.show(),而是在循环之后执行。
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 2016-10-27
  • 1970-01-01
  • 2011-09-15
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多