2016-09-10 7 views
2

"123.csv"という名前のexelファイルがあります。このファイルは、2つのカラム "case"と "event"からなるPROM機能を実行したときの出力です。大文字と小文字を区別してイベントをグループ化して、この出力を変更したい。具体的には、新しいセルにマージされる同じケースに属するイベントをグループ化するPythonスクリプトを作成したいと思います。最初の行列の長さは何ですか?誰でも私にいくつかのアイデアを教えてください。 curent and desiret outputPythonがExcelで特定のセル値を読み取る

import csv 

with open('123.csv', 'rb') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') 
    for row in spamreader: 
     print ', '.join(row).replace(',',' ').replace('"',' ') 

あなたの入力がされて、これは私が書いた部分ですが、それだけでファイルを読み込んで、いくつかのpunctiation

+0

これまでに書いたコードを投稿してください。 –

+0

私はPythonに新しいので、どのようにそれを開始するのか分かりません – Adriano10

+0

次回は入出力として投稿していただきありがとうございます。 –

答えて

0

を削除するには、単純なCSV & defaultdict(のpython 3)

で行うのは簡単です

case,event 
101,A 
101,X 
101,Y 
102,B 
102,C 
103,Z 

コードのようなあなたはあなたのためにこれを行うにはitertoolsからGROUPBY使用することができます

import collections 

with open("csv.csv") as f: 
    cr = csv.reader(f,delimiter=",") 

    d=collections.defaultdict(lambda : list()) 
    header=next(cr) # read title 
    for r in cr: 
     d[r[0]].append(r[1]) # fill dict 

with open("csv2.csv","w",newline="") as f: 
    cr = csv.writer(f,delimiter=",") 
    cr.writerow(header) # title 
    for k,v in d.items(): 
     cr.writerow([k,",".join(v)]) 

出力

case,event 
103,Z 
101,"A,X,Y" 
102,"B,C" 
0

。この例:

from itertools import groupby 

current = [(101, 'A'), (101, 'B'), (101, 'Y'), (102, 'C'), (102, 'D'), (102, 'U')] 
desired = [] 

for key, group in groupby(current, lambda x: x[0]): 
    lst = [element[1] for element in group] 
    grouped = (key, lst) 
    desired.append(grouped) 

print(desired) 

基本的には、GROUPBYあなたが今持っているものの配列と、配列の最初の要素を(配列をソートする必要がある)かかりラムダ関数を与えます。 Groupbyは最初の要素を使って要素をグループ化します。