按通过字符串值定义的组对 CSV 数据进行分类

Categorizing CSV data by groups defined through string values

所以我尝试使用 pandas 通过 CSV 文件组织数据,以便我可以在 matplotlib 中绘制它,我有不同行的值,其中一些是控制值,另一些是实验值。我能够将行分隔成图形,但是我似乎无法使其工作,我尝试使用循环(如下所示)来绘制图形,尽管我不断收到“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()

你的 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 中的每组 experimental/control 值。

那么你应该尝试(未经测试):

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",那么这将遍历 ['experimental', 'control'](实际上是一个 numpy 数组,同样,做注意 unique() 不排序,所以输出的顺序取决于输入的顺序。

df[df['Group'] == group] 然后 select 列 'Group' 等于组的所有行。 查看 pandas documentation for where method and masking 了解更多详情。