1

だから私はこのcsvファイルを持っていて、1つの列は次のようになります:

1022
1040
1042
1035
11728
1036
1022
1040
1042
1035
11728
1036
1022
1040
1042
1035
11728

今、私は数字がどのくらいの頻度で発生するかを数える必要があります。matplotlib でグラフィック画像を作成するには、これが必要です。したがって、グラフィックは数字がどれだけ発生するかを示します(この状況ではイベントIDです)

これまでのところ、その行を印刷するコードしかありません...

my_reader = csv.reader(open(csvpath))
for col in my_reader:
      print col[3]

その特定の列の数値が出現する頻度をカウントするにはどうすればよいですか?

4

4 に答える 4

3

数値からカウントへのマッピングを作成するだけです。collections.Counter()クラスはそれを簡単にします:

import collections

counts = collections.Counter()
for row in my_reader:
    counts[row[3]] += 1

a を使用するcollections.defaultdictこともオプションです。

counts = collections.defaultdict(int)
for row in my_reader:
    counts[row[3]] += 1

または、通常のを使用できますdict:

counts = {}
for row in my_reader:
    counts[row[3]] = counts.get(row[3], 0) + 1
于 2012-12-03T13:13:50.977 に答える
1

を使用pandasしてデータを読み取り、値をカウントしてからプロットすることができます。舞台裏でパンダはこれnumpymatplotlib達成するために使用します。 read_csvプロットコマンドは複数の列でも機能します。

In [29]: df = pd.read_csv('data.csv', names=['my_data']) 

In [30]: counts = df['my_data'].value_counts()

In [31]: counts
Out[31]: 
1022     3
1042     3
1040     3
1035     3
11728    3
1036     2

In [32]: counts.plot(kind='barh')
Out[32]: <matplotlib.axes.AxesSubplot at 0x4f7f510>

value_counts

于 2012-12-03T20:03:30.563 に答える
1

このコードは行の合計数をカウントします。特定の行が必要な場合は、print ステートメントの前に if 条件を使用し、count==row_number exa: if count==3: かどうかを確認して、合計数を取得します。

         reader=csv.reader(open("first.csv"))
         count=0;
         for row in reader:
             count+=1
             print "total no in row "+str(count)+" is "+str(len(row))
             for i in row:
                 print i
于 2012-12-03T14:02:41.527 に答える
1

簡単な辞書を使用できます。

my_reader = csv.reader(open(csvpath))
my_dict = {}
for row in my_reader:
    try:
        my_dict[row[3]] += 1
    except KeyError:
        my_dict[row[3]] = 0
于 2012-12-03T13:25:20.560 に答える