2013-12-17 1 views
0

변환이 필요한 Excel 기반 데이터 세트가 있습니다. Python을 배우면서 코드를 읽고 수정할 수 있기 때문에 Python 기반 솔루션을 요청할 것입니다. Excel 또는 CSV 기반 입출력에서도 괜찮습니다.Excel (CSV) - 반복 행이있는 행 매핑으로 헤더 데이터 변환

이 내 데이터가 모습입니다

채널조건값 1값 2VALUE3(헤더)
채널 A 조건 B 라이브 라이브 파일럿

채널 A 조건 B 라이브 파이

채널조건값 (:

채널 B 조건 C 파일럿 파일럿 파일럿

채널 C 조건 D 라이브 라이브 라이브 라이브 많은 이것은 내가 원하는 출력 모두)상태(헤더. 이

채널 A 조건 B 값 3 파일럿

채널 A 라이브) 출력에 표시

채널 A 조건 B 값 1 라이브

채널 A 조건 B 값 2하지 않으면 나는 OK입니다 조건 B 값 1 라이브

채널 A 조건 B 값이 파일럿

채널 A CONDIT 이온 B 값 3 라이브 ...

기본적으로 열 머리글 및 데이터 집합 자체 (라이브/파일럿)에서 가져와야하는 각 "값"에 대한 채널 및 조건의 반복입니다. 스크린 샷의 유형이있다 : 나는 여기에 내가 enter image description here

2 편집을 원하는 나타내는 이미지가

을 수행하는 등 변화의 약 1000 행을 가지고

나는 약간의 도움을 부탁드립니다. 마지막 3 행은 채널 A가 아니라 채널 B를 읽어야합니다.

답변

0

xlrd 모듈을 사용해보십시오.같은 뭔가 :

import xlrd 

wb = xlrd.open_workbook(path) 
sheet = wb.sheet_by_index(index) 

column_list = range(0, sheet.ncols) 

val_name = [sheet.cell_value(rowx=0, colx=i) for i in column_list] 
channel = val_name.pop(0) 
condition = val_name.pop(0) 

print(channel, condition, "Value *", "Status") 
lines = [] 
for r in range(1, sheet.nrows): 
    row = [sheet.cell_value(rowx=r, colx=i) for i in column_list] 
    channel = row[0] 
    condition = row[1] 
    values = row[2:] 

    lines = zip([channel]*len(values), 
       [condition]*len(values), 
       val_name, 
       values) 
    for l in lines: 
     print(l) 
+0

CSV/Excel 읽기/쓰기는 내가 할 수있는 일이며, 주요 문제는 헤더에서 행 매핑으로의 변환을 수행하는 것입니다. 나는 그것을 밖으로 시도 할 것이다. 감사. – nnayak

+0

이 작동합니다. 훌륭한. 이제 출력을 Excel/CSV로 다시 가져 오는 방법을 알아 내야합니다. 고마워. – nnayak

+0

그래서 한 행의 출력은 다음과 같습니다. "(u'Channel ', u'Channel A') \t (u'Condition ', u'Condition b') \t (u'Value1 ', u'Live') \t (u'Value2 ', u'Live') \t (u'Value3 ', u'Pilot') "여러 행이 필요합니다. 각 "Value, Live"에 대한 의미는 채널 및 조건 필드를 반복해야합니다. 행 1 . 행 2 <채널 A 조건 B 값 2 라이브> ... – nnayak

0

그런 일을해야합니다.

import csv 

transformed = [] 
with open('excel.csv', newline='') as csvfile: 
    r = csv.reader(csvfile, delimiter=' ', quotechar='|') 
    for row in r: 
     channel, condition, *vals = row 
     for val in vals: 
      transformed.append([channel, condition, val]) 

with open('transformed.csv', 'w', newline='') as csvfile: 
    w = csv.writer(csvfile, delimiter=' ', 
          quotechar='|', quoting=csv.QUOTE_MINIMAL) 
    for row in transformed: 
     w.writerow(' '.join(row)) 
+0

는 내가 * 발에 대해 약간의 오차가있어, 그래서 값 1, 값, VALUE3에 * 발을 변경하고 지금은 오류 역 추적 (마지막으로 가장 최근에 전화를) 다음 얻을 : 파일 "1. ("1.csv ', newline =' ') with csvfile : TypeError :'newline '은이 함수의 잘못된 키워드 인수입니다. – nnayak

+0

이제 작동해야합니다. 파일을 excel.csv로 예상하고 transformed.csv에 씁니다. 어쩌면 당신은 csv.writer 매개 변수를 원하는대로 고쳐야 만합니다. 건배 –

관련 문제