按通过字符串值定义的组对 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 了解更多详情。
所以我尝试使用 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 了解更多详情。