2013-09-22 2 views
-2

이것은 내 첫 번째 게시물이지만 계산을 수행하고 csv 데이터 파일 내에 값을 삽입하는 방법을 알려주 길 바래요.계산하고 결과를 파이썬 CSV로 삽입하십시오.

각 행에 대해 각 '고유함'을 가져 와서 열 12에 표시된 점수를 합산 할 수 있기를 원합니다. 아래 예제 데이터를 참조하십시오.

text1,Data,Class,Uniqueclass1,data1,data,2,data2,data3,data4,data5,175,12,data6,data7 
text1,Data,Class,Uniqueclass1,data1,data,2,data2,data3,data4,data5,171,18,data6,data7 
text1,Data,Class,Uniqueclass2,data1,data,4,data2,data3,data4,data5,164,5,data6,data7 
text1,Data,Class,Uniqueclass2,data1,data,4,data2,data3,data4,data5,121,21.5,data6,data7 
text2,Data,Class,Uniqueclass2,data1,data,4,data2,data3,data4,data5,100,29,data6,data7 
text2,Data,Class,Uniqueclass2,data1,data,4,data2,data3,data4,data5,85,21.5,data6,data7 
text3,Data,Class,Uniqueclass3,data1,data,3,data2,data3,data4,data5,987,35,data6,data7 
text3,Data,Class,Uniqueclass3,data1,data,3,data2,data3,data4,data5,286,18,data6,data7 
text3,Data,Class,Uniqueclass3,data1,data,3,data2,data3,data4,data5,003,5,data6,data7 

예를 들어 첫 번째 고유 클래스는 처음 두 행에 대해 지속됩니다.

text1,Data,Class,Uniqueclass1,data1,data,2,data2,data3,data4,data5,175,12,data6,data7,346 
text1,Data,Class,Uniqueclass1,data1,data,2,data2,data3,data4,data5,171,18,data6,data7,346 

I는 싶습니다 : I 따라서 생성은 다음과 같을 것이다 (모두 175 & (171)의 합) '346'하다고 행에 subsquent 값을 삽입 할 수 있도록하고자

덕분에 uniqueclass '의 각각에 대해이 작업을 수행 할 수 SMNALLY

+6

당신은 아무것도를 시도 : 여기

내 시도 것입니까? – tacaswell

+0

파이썬 인터프리터를 열고'' "blah, 230, bleh".split (',')''을 시도하십시오. 도움이 될 수 있습니다. – halflings

답변

3

나는 항상 일의이 유형에 대한 defaultdict 클래스있다.

from collections import defaultdict 

class_col = 3 
data_col = 11 

# Read in the data 
with open('path/to/your/file.csv', 'r') as f: 
    # if you have a header on the file 
    # header = f.readline().strip().split(',') 
    data = [line.strip().split(',') for line in f] 

# Sum the data for each unique class. 
# assuming integers, replace int with float if needed 
count = defaultdict(int) 
for row in data: 
    count[row[class_col]] += int(row[data_col]) 

# Append the relevant sum to the end of each row 
for row in xrange(len(data)): 
    data[row].append(str(count[data[row][class_col]])) 

# Write the results to a new csv file 
with open('path/to/your/new_file.csv', 'w') as nf: 
    nf.write('\n'.join(','.join(row) for row in data)) 
+0

추가 의견을 보내 주셔서 감사합니다! 일단 15 점을 받으면 나는 대답을 upvote 것입니다. :) – SMNALLY

+0

이 코드는 훌륭합니다. 합계보다 오히려 마지막에 카운트를 넣을 수 있도록 노력했습니다. 하지만 효과가 없습니다. 이 작업이 쉬운 경우이 작업을 수행하는 방법에 대한 의견을 보내 주시면 감사하겠습니다. – SMNALLY

+1

늦게 답장을 드려 죄송합니다. 나는 휴일에 있었어. 이를 합계가 아닌 클래스 인스턴스의 수로 만들려면'int (row [data_col])'을'1'로 대체하십시오. –

관련 문제