2017-09-23 79 views
0

我有這個CSV文件,其中包含大量的信息。我編寫了一個程序,能夠計算'反饋'欄內的內容及其頻率。CSV選擇多列

我現在的問題是,在「反饋」列中生成了項目之後,我想專門提出另一個列,它們符合「反饋」列。

CSV文件的一些示例如下:

Feedback  Description Status 
Others  Fire Proct  Complete 
Complaints Grass   Complete 
Compliment Wall   Complete 
...   ...   ... 

隨着「反饋」列的頻率,我現在想展示,讓我們說,如果我選擇「投訴」。然後,我希望所有符合「描述」中的「投訴」的內容都能顯示出來。

事情是這樣的:

Complaints Grass 
Complaints Table 
Complaints Door 
...   ... 

以下是我的代碼至今:

import csv, sys, os, shutil 
from collections import Counter 

reader = csv.DictReader(open('data.csv')) 
result = {} 
for row in reader: 
    for column, value in row.iteritems(): 
     result.setdefault(column,[]).append(value) 

list = [] 
for items in result['Feedback']: 
    if items == '': 
     items = items 
    else: 
     newitem = items.upper() 
     list.append(newitem) 

unique = Counter(list) 

for k, v in sorted(unique.items()): 
    print k.ljust(30),' : ', v 

這只是由此算什麼是「反饋」欄目內的部分和頻率它。

+0

請加你迄今爲止編寫的代碼。 –

+0

@MartinEvans剛剛添加了它。 – Luke

回答

1

你也可以存儲defaultdict()拿着條目列表每個類別如下:

import csv 
from collections import Counter, defaultdict 

with open('data.csv', 'rb') as f_csv: 
    csv_reader = csv.DictReader(f_csv) 

    result = {} 
    feedback = defaultdict(list) 

    for row in csv_reader: 
     for column, value in row.iteritems(): 
      result.setdefault(column, []).append(value) 
     feedback[row['Feedback'].upper()].append(row['Description']) 

data = [] 

for items in result['Feedback']: 
    if items == '': 
     items = items 
    else: 
     newitem = items.upper() 
     data.append(newitem) 

unique = Counter(data) 

for k, v in sorted(unique.items()): 
    print "{:20} : {:5} {}".format(k, v, ', '.join(feedback[k])) 

這將顯示您的輸出:

COMPLAINTS   :  2 Grass, Door 
COMPLIMENT   :  2 Wall, Table 
OTHERS1    :  1 Fire Proct 

還是多行相反,如果你使用:

print "{:20} : {:5}".format(k, v) 
    print ' ' + '\n '.join(feedback[k]) 

當使用csv庫,你應該用Python 2.x中的rb打開你的文件。同時避免使用list作爲變量名,因爲這會覆蓋Python list()函數。

注意:打印對齊數據時使用format()更容易。

1

您可以使用此代碼片段末尾的代碼來完成此操作,該代碼片段來自您的問題中的代碼。我修改瞭如何使用with語句讀取文件,以確保在不再需要時關閉文件。我還更改了名爲list的變量名稱。因爲它隱藏了內置類型的名稱,大多數人認爲這是一種糟糕的編程習慣。有關此主題和相關主題的更多信息,請參閱PEP 8 - Style Guide for Python Code

出於測試目的,我還添加了'Complaints'類型的'Feedback'項目的更多行。

import csv 
from collections import Counter 

with open('information.csv') as csvfile: 
    result = {} 
    for row in csv.DictReader(csvfile): 
     for column, value in row.iteritems(): 
      result.setdefault(column, []).append(value) 

items = [item.upper() for item in result['Feedback']] 
unique = Counter(items) 

for k, v in sorted(unique.items()): 
    print k.ljust(30), ' : ', v 

print 
for i, feedback in enumerate(result['Feedback']): 
    if feedback == 'Complaints': 
     print feedback, ' ', result['Description'][i] 

輸出:

COMPLAINTS      : 3 
COMPLIMENT      : 1 
OTHERS       : 1 

Complaints Grass 
Complaints Table 
Complaints Door