2012-12-03 175 views
1

所以我有這個CSV文件和一個collumn看起來是這樣的:伯爵號文件

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

現在我需要怎麼算oftend一些發生。我需要用matplotlib製作一張圖片。因此,圖形將顯示多少發生了一些(在這種情況下它是一個事件ID)

到目前爲止,我只讓代碼打印該行...

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

我如何算多久該特定欄目中的數字發生?

+0

看起來不像CSV或確實是一個'row' - 就是你們的榜樣*了'homework'標籤被取下實際*數據 –

+0

,請不要使用它。 –

+0

@JonClements:我認爲OP意味着'一列'。代碼引用'row [3]'。 –

回答

3

只需創建一個從數字到數量的映射。該collections.Counter()類使得這最簡單的:

import collections 

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

使用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 
+0

'count = collections.Counter(對於my_reader中的行,行[3])'對於那些喜歡單行的人。 –

+0

thnx我使用了你的代碼:)我唯一需要做的就是改變輸出,所以我可以用matplotlib來創建一個圖。 matplotlib只需要(「1003」,1),你的代碼的輸出是'1003':1 ,.我用replace()改變它 – DT22

+0

@ DT22:使用'counts.items()'得到'(key,count)'的元組序列。 –

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 
1

此代碼將計數行總數,如果你想要特定的行那麼如果要是打印語句之前條件和檢查使用count == ROW_NUMBER EXA:如果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 
1

您可以使用​​來讀取您的數據,計數值並繪製它。在幕後熊貓使用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