2017-09-07 3 views
1

헤더로 키와 데이터를 값으로 사용하는 CSV 파일이 있습니다. 제 목표는 CSV 파일을 Json으로 변환하여 데이터베이스에 업로드하고 내가 업로드 한 데이터를 출력하는 것입니다. 성공적으로 CSV를 Json으로 변환했지만 출력에 문제가 있습니다.파이썬을 사용하여 CSV를 JSON으로 변환

나는 현재

import csv 
import json 
import pandas as pd 
csvfile = open ('so-emissions-by-world-region-in-million-tonnes.csv','r') 
reader = csv.DictReader(csvfile) 
result = [] 
for row in reader: 
    result.append(row) 
result = json.dumps(result) 
result = json.loads(result) 
keys = ('Entity' ,'Year','SO2 emissions- Clio Infra') 
print(result) 

CSV Data

This is the output of result

가 올바른 출력

'First Key' 

Value 1 

Value 2 

Value 3 

... 

'Second Key' 

Value 1 

Value 2 

Value 3 

... 

'Third Key' 

Value 1 

Value 2 

Value 3 

... 
+0

pd.read_csv()에 전달해야 https://stackoverflow.com/ 도움/누군가 응답). –

답변

5

당신은 당신의 CSV를 읽을 csv.DictReader를 사용하고 01의 출력에는 직렬화 할 수있는 무엇.

import csv 
import json 

data = [] 
with open('file.csv') as f: 
    for row in csv.DictReader(f): 
     data.append(row) 

json_data = json.dumps(data) 
+0

나는 당신이 제안한 것과 비슷한 것을 가지고있다. 그러나 필자는 내가 원하는대로 출력물을 인쇄 할 수 없다. 그래서 저는 json_data [ "Key"]를 인쇄 할 수 없다는 것을 압니다 >> "Value 1"..... 터플이 아니기 때문에 –

+0

@AlexisChen'json_data'는 문자열입니다 ... kv 쌍을 인쇄하려면 , 당신은'data [i]'에 접근하기를 원할 것이다. –

+0

감사! 나는 그것을 알아 낸다 :) 나는 k-v 쌍에 접근하기 위해 for 루프를 작성했다. –

1

당신은 당신이 질문에 같이 좋은 형식으로 출력을 얻으려면 사전 자체가되는 결과를 인쇄하는 각 키를 인쇄 할 사전을 통해 갈 필요는 질문

당신은 당신이 dataframe에 데이터를로드하는 경우 .to_dict를 사용하려고 할 수 있습니다
1

에서 언급 한 바와 같이

for key in keys: #looking through each key 
    print (key) 
    for i in results: #going through the results and printing the value of the index with the current key 
     print (results[i][key]) 

이 콘솔에서 예상되는 출력을 제공한다 값.

df = pd.read_csv('so-emissions-by-world-region-in-million-tonnes.csv') 
df.T.to_dict().values() 

.to_dict() 컬럼에 의해지도에 dataframe를 회전 (각 열에 대해 당신은 인덱스 -> 값을 갖는다). .to_dict을 조 변경하여 사용하면 행별로지도가됩니다 (각 색인에 대해 map column -> value가 있음). 키가 필요하지 않으므로 그냥 가져 가야합니다. .values()

python 3.5를 사용하는 경우 dict_values 개체이므로 조심스럽게 변환하기 전에 list()을 사용하는 것이 좋습니다.

덧붙여 dict(zip(columns, values))을 사용하면 각 행에 대해 map column-> value 값을 얻을 수 있습니다. 이 경우에는 팬더가 전혀 필요하지 않습니다.

편집 : csv로 더 헤더가없는 경우, 당신은 ([가장 도움이되는 일을 받아 들일]하시기 바랍니다 질문에 대한 답변이 경우 키워드 names=

관련 문제