2016-09-05 4 views
1

날짜 열에서 가져온 데이터를 삽입하려고합니다. csv 파일의 열 머리글은 date,day,month,year,pcp1,pcp2,pcp3,pcp4,pcp5,pcp6입니다. 열 day, month, year은 현재 비어 있습니다.csv 파일의 특정 열에 데이터를 삽입하십시오.

분할 방법으로 날짜에서 얻은 데이터를이 열에 삽입하고 싶습니다. 내가 어떻게 할 수 있니? 여기

은 csv 파일의 예제 데이터입니다 : 여기

date day month year pcp1 pcp2 pcp3 pcp4 pcp5 pcp6 
1.01.1979    0.431 2.167 9.375 0.431 2.167 9.375 
2.01.1979    1.216 2.583 9.162 1.216 2.583 9.162 
3.01.1979    4.041 9.373 23.169 4.041 9.373 23.169 
4.01.1979    1.799 3.866 8.286 1.799 3.866 8.286 
5.01.1979    0.003 0.051 0.342 0.003 0.051 0.342 
6.01.1979    2.345 3.777 7.483 2.345 3.777 7.483 
7.01.1979    0.017 0.031 0.173 0.017 0.031 0.173 

내 코드입니다 :

import csv 

dd=[] 
mm=[] 
yy=[] 
with open('output2.csv') as csvfile: 
      reader = csv.DictReader(csvfile, fieldnames=("date","day","month","year","pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"), delimiter=';', quotechar='|') 
      next(reader) # skip header row 
      x = [row['date'] for row in reader] 

for date_str in x: 
    day, month, year = date_str.split('.') 
    dd.append(day) 
    mm.append(month) 
    yy.append(year) 

csvfile.close() 

with open('output2.csv') as f: 
    fieldnames = ["date","day","month","year","pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"] 
    writer = csv.DictWriter(f, fieldnames=fieldnames,delimiter=';', quotechar='|') 
    for i in range(len(dd)): 
     writer.writerow({'day':dd[i]}) 
    for i in range(len(mm)): 
     writer.writerow({'month':mm[i]}) 
    for i in range(len(yy)): 
     writer.writerow({'year':yy[i]}) 


f.close() 

답변

0

사용 팬더가. 너무 멀지 않은 대부분의 코드를 사용할 수 있습니다.

import pandas as pd  
filename = "test.csv" 
data = pd.read_excel(filename) 

x = data["date"] 
dd=[] 
mm=[] 
yy=[] 

for date_str in x: 
    day, month, year = date_str.split('.') 
    dd.append(day) 
    mm.append(month) 
    yy.append(year) 

data["day"] = dd 
data["month"] = mm 
data["year"] = yy 

data.to_csv("test2.csv") 

test2.csv에서 일 월 년이 채워집니다. 당신이 (필자는 않을 것이다)

data.to_csv("test2.csv",index = False) 

로 마지막 차선

+0

를 사용하여 테스트를, 난이 오류가 : ".l은 파이썬 3.5와 2.7의 두 가지 버전을 가지고 있습니다.이 문제를 일으킬 수 있습니다.하지만 아직 해결할 수 없습니다. 해결책으로는 많은 일을했지만 아무런 노력도하지 않았습니다. 그래서 팬더가 없으면 해결해야합니다. –

+0

파이썬 2.7로 테스트했습니다. 잘 작동한다. 나는 파이썬 3.5에 대한 경험이 없기 때문에 거기서 도울 수 없다. – Glostas

+0

모듈 설치에 관한 문제를 해결 했습니까? 나는 내 대답 – Glostas

2

를 사용하는 첫 번째 행과 인덱스를 갖고 싶어 do't 경우 다음과 같이 그냥 CSV를 구문 분석 할 수있다. 모든 행을 목록으로 읽어 들인 다음 날짜 구성자를 빈 열에 삽입합니다.

import csv 

with open('output2.csv', newline='') as f_input: 
    csv_input = csv.reader(f_input, delimiter=';', quotechar='|') 
    header = next(csv_input) 
    rows = list(csv_input) 

with open('output2b.csv', 'w', newline='') as f_output: 
    csv_output = csv.writer(f_output, delimiter=';', quotechar='|') 
    csv_output.writerow(header) 

    for row in rows: 
     day, month, year = row[0].split('.') 
     row[1:4] = [day, month, year] 
     csv_output.writerow(row) 

당신에게 다음과 같은 출력주기 : 런처 "치명적인 오류 : 리터의 시도는 파이썬 3.5의 모듈을 설치하는 경우

date;day;month;year;pcp1;pcp2;pcp3;pcp4;pcp5;pcp6 
1.01.1979;1;01;1979;0.431;2.167;9.375;0.431;2.167;9.375 
2.01.1979;2;01;1979;1.216;2.583;9.162;1.216;2.583;9.162 
3.01.1979;3;01;1979;4.041;9.373;23.169;4.041;9.373;23.169 
4.01.1979;4;01;1979;1.799;3.866;8.286;1.799;3.866;8.286 
5.01.1979;5;01;1979;0.003;0.051;0.342;0.003;0.051;0.342 
6.01.1979;6;01;1979;2.345;3.777;7.483;2.345;3.777;7.483 
7.01.1979;7;01;1979;0.017;0.031;0.173;0.017;0.031;0.173 

파이썬 3.5.2

+0

내가 그것을 시도하면 "일, 월, 년 = 행 [0] .split ('.') IndexError : 목록 인덱스가 범위를 벗어났습니다."라는 오류 메시지가 나타납니다. 파이썬 3.5를 사용합니다. –

+0

파이썬 3.5의 경우 파일을 다르게 열어야합니다. 지금 시도해보십시오. –

+0

나는 그것의 대답을 통해 파이썬 2.7에서 작동 해 보았습니다. 그런 다음 python 3.5를 사용하여 새로운 대답과 일부 파일을 시도했지만 오류가 발생합니다. 일, 월, 년 = 행 [0] .split ('.') .ValueError : "날짜"열, 코드를 사용해야하지만 코드에 따라 코드가 분할하려고하는 열이 많이 있습니다. –

관련 문제