2017-09-07 19 views
1

私はキーとしてヘッダーと値としてデータを持つCSVファイルを持っています。私の目標は、CSVファイルをJsonに変換してデータベースにアップロードし、アップロードしたデータを出力することです。 CSVを正常にJsonに変換しましたが、私の出力に問題があります。私は現在、Pythonを使用して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を読んで、その後01で、その出力をシリアル化するためにcsv.DictReaderを使用することができます。

あなたは現在の辞書自体で結果を印刷し、ご質問のように素敵なフォーマットで出力を取得したい場合、あなたはそれぞれのキーをプリントアウトするために辞書を通過する必要があり、そのされている
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

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]) 

質問

1

で述べたように、これはコンソールで予想される出力を与えるべきあなたはデータフレームにデータをロードする場合.to_dictを使用しようとすることができます。

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

.to_dict()カラム(列ごとにあなたはindex-を持っている>値)によってマップで自分のデータフレームをオンにします。 .to_dictを転置して使用すると、これは行ごとのマップになります(各インデックスに対して、mapのcolumn-> valueの値があります)。 .values()

python 3.5を使用している場合はdict_valuesオブジェクトなので、list()を使用してjsonに変換することをお勧めします。

ところで、dict(zip(columns, values))を使用して、各行のmap column-> valueを取得することもできます。これは高速です。その場合、パンダはまったく必要ありません。

編集:CSVファイルが何のヘッダを持っていない場合は、([最も役立つものを受け入れる]してください、あなたの質問に答えた場合はキーワードnames=

関連する問題