Python 3中的嵌套Json转换为csv

2024-05-19 20:11:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Python中将JSON数据转换成CSV,并在堆栈交换中发现了这段代码(link:How can I convert JSON to CSV?)。它在python3中不再起作用,给了我不同的错误。有人知道如何修复python3吗?谢谢。在

以下是我的JSON数据:

{ "fruit": [ 
    { "name": "Apple", 
      "binomial name": "Malus domestica", 
      "major_producers": [ "China", "United States", "Turkey" ], 
      "nutrition": 
          { "carbohydrates": "13.81g", 
            "fat": "0.17g", 
            "protein": "0.26g" 
          } 
     }, 
     { "name": "Orange", 
       "binomial name": "Citrus x sinensis", 
       "major_producers": [ "Brazil", "United States", "India" ],
       "nutrition": 
          { "carbohydrates": "11.75g", 
            "fat": "0.12g", 
            "protein": "0.94g" 
          } 
      }, 
      { "name": "Mango", 
        "binomial name": "Mangifera indica", 
        "major_producers": [ "India", "China", "Thailand" ],
        "nutrition": 
            { "carbohydrates": "15g", 
              "fat": "0.38g", 
              "protein": "0.82g" 
            } 
       } 
] }

输出CSV应该如下所示

enter image description here


Tags: csv数据namejsonfatpython3unitedproducers
2条回答

最简单的方法是将所需的dict放入pandas数据帧,并使用其.to_csv()方法:

json_data = { "fruit": [ { "name": "Apple", "binomial name": "Malus domestica", "major_producers": [ "China", "United States", "Turkey" ], "nutrition": { "carbohydrates": "13.81g", "fat": "0.17g", "protein": "0.26g" } }, { "name": "Orange", "binomial name": "Citrus x sinensis", "major_producers": [ "Brazil", "United States", "India" ], "nutrition": { "carbohydrates": "11.75g", "fat": "0.12g", "protein": "0.94g" } }, { "name": "Mango", "binomial name": "Mangifera indica", "major_producers": [ "India", "China", "Thailand" ], "nutrition": { "carbohydrates": "15g", "fat": "0.38g", "protein": "0.82g" } } ] }
df = pd.DataFrame(json_data['fruit'])
df.to_csv('/wherever/file/shall/roam/test.csv')

这会导致一个csv文件

enter image description here

仍然使用pandas,但方法稍有不同,将JSON视为字典

import pandas as pd
import pprint as pprint
x = { "fruit": [ { "name": "Apple", "binomial name": "Malus domestica", "major_producers": [ "China", "United States", "Turkey" ], "nutrition": { "carbohydrates": "13.81g", "fat": "0.17g", "protein": "0.26g" } }, { "name": "Orange", "binomial name": "Citrus x sinensis", "major_producers": [ "Brazil", "United States", "India" ], "nutrition": { "carbohydrates": "11.75g", "fat": "0.12g", "protein": "0.94g" } }, { "name": "Mango", "binomial name": "Mangifera indica", "major_producers": [ "India", "China", "Thailand" ], "nutrition": { "carbohydrates": "15g", "fat": "0.38g", "protein": "0.82g" } } ] }

在dict中添加一些附加信息,这些信息将提供更接近所需输出的附加头。在

^{pr2}$

最新词典的精美印刷品

pprint(x['fruit'])

enter image description here

从dict列表中创建pandas数据帧,如下所示:

xdf = pd.DataFrame.from_dict(x['fruit'])

只使用您需要的标题

xdf = xdf[['name', 'binomial name', 'major_producers1','major_producers2','major_producers3','carbs','fat','protein']]

那么正如@SpghttCd提到的那样,您可以使用pd.to\U csv. 在这种情况下不需要索引。在

xdf.to_csv('filename.csv',index=False)

csv文件应如下所示:

enter image description here

相关问题 更多 >