首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将CSV转换为JSON?

如何将CSV转换为JSON?
EN

Stack Overflow用户
提问于 2017-09-07 16:41:17
回答 3查看 10.1K关注 0票数 3

我有一个CSV文件,头作为键,数据作为值。我的目标是将CSV文件转换为Json,然后上传到数据库中并输出我上传的数据。我已经成功地将CSV转换为Json,但我的输出遇到了问题。

我目前所拥有的

代码语言:javascript
复制
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数据:

代码语言:javascript
复制
[{'502 emissions- Clio Infra': '0', 'Entity': 'Africa', 'Year': '1860 '},
 {'502 emissions- Clio Infra': '0', 'Entity': 'Africa', 'Year': '1870'},
 {'502 emissions- Clio Infra': '0.059', 'Entity': 'Africa', 'Year': '1880'},
 {'502 emissions- Clio Infra': '0.065', 'Entity': 'Africa', 'Year': '1890'},
 {'502 emissions- Clio Infra': '0.071', 'Entity': 'Africa', 'Year': ' 1900'},
 {'502 emissions- Clio Infra': '0.146', 'Entity': 'Africa', 'Year': '1910'},
 {'502 emissions- Clio Infra': '0.372', 'Entity': 'Africa', 'Year': '1920'},
 {'502 emissions- Clio Infra': '0.41', 'Entity': 'Africa', 'Year': ' 1930'},
 {'502 emissions- Clio Infra': '0.56 ', 'Entity': 'Africa', 'Year ': '1940'}]

This is the output of result

正确的输出:

代码语言:javascript
复制
'First Key'
Value 1
Value 2
Value 3
...
'Second Key'
Value 1
Value 2
Value 3
...
'Third Key'
Value 1
Value 2
Value 3
...
EN

回答 3

Stack Overflow用户

发布于 2017-09-07 16:46:48

您可以使用csv.DictReader读取CSV,然后使用json.dumps序列化其输出。

代码语言:javascript
复制
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)
票数 8
EN

Stack Overflow用户

发布于 2017-09-07 16:50:47

您当前正在打印的结果是字典本身,如果您想以问题中所示的良好格式获得输出,则需要遍历字典以打印出每个键及其值

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-09-07 16:55:25

如果在数据帧中加载数据,可以尝试使用.to_dict

代码语言:javascript
复制
df = pd.read_csv('so-emissions-by-world-region-in-million-tonnes.csv')
df.T.to_dict().values()

.to_dict()通过列在映射中转换数据帧(对于每一列,您都有索引->值)。通过转置和使用.to_dict,这是一个按行的映射(对于每个索引,您都有一个映射列->值)。你不需要钥匙,就拿着.values()

请注意,如果您使用的是Python3.5,则这是一个dict_values对象,因此在转换为json之前,您可能希望使用list()

顺便说一句,您还可以使用dict(zip(columns, values))为每一行获取一个映射列->值,这样会更快。在这种情况下,你根本不需要熊猫。

编辑:如果csv没有头部,需要通过关键字names=pd.read_csv()中传递

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46091769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档