2017-07-31 1 views
-1

私はpandasを使ってCSVファイルを使ってデータを整理しようとしていますので、matplotlibでグラフ化できます。私はグラフに行を分けることができますが、私はそれを動作させるように見えることができない、私は 'TypeError:'型 'オブジェクトがsubscriptableではない'を取得し続けてグラフ(以下参照)を試みた。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(n)'です。ここで 'n'は整数です。 [ドキュメントを参照してください。](https://docs.python.org/3.6/library/stdtypes.html#range)おそらく他の問題もあります。詳細については、使用するデータフレームを与える数行のコードを提供することを検討してください。 – saintsfan342000

答えて

2

あなたのループのためにタイプミスがあります:

for steps in range [group]: 

for steps in range(group): 

あなたのためのループがrange__getitem__を呼び出そうとしますが、このメソッドが定義されていないので、あるべきrangeの場合はTypeError: 'type' object is not subscriptableになります。詳細については、python documentation for getitem()を確認してください。それは、入力だとrangeは整数を期待するので

しかし、あなたは、その内のすべての項目をループにパンダSeriesrangeを使用することはできません。代わりに、次のものを使用する必要があります。

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]は、 'Group'列がgroupと等しいすべての行を選択します。 詳細については、pandas documentation for where method and maskingを確認してください。

+0

私の質問に答えるのにうってつけの作品です。ありがとうございました。リンクはもっと役立ちました。しかし、それらを単一のグラフにする方法を知っていますか? – tms

+0

1つのグラフだけが必要な場合は、ループ内ではなく、ループの後に 'plt.show()'を実行してください。 – Unatiel

関連する問題