【问题标题】:Python csv to json using pandas - csv columns to nested jsonPython csv to json using pandas - csv 列到嵌套 json
【发布时间】:2021-07-26 22:58:36
【问题描述】:

Python 3.8.5 和 Pandas 1.1.3

我有一个包含以下列的 csv 文件:姓名、城市、州和邮政编码。我需要将城市、州和邮政编码列值转换为 json,其中包含一个名为 Residence 的对象。

例如:

CSV 文件

Name        City    State  Zipcode
John Doe    Akron   OH     44140

我需要 JSON 输出的结构如下:

{
    "name": "John Doe",
    "residence" : 
        {
        "city": "Akron",
        "state": "OH",
        "zipcode": 44140
        }
}

我目前使用 Pandas 使用以下代码将 csv 转换为 json:

import pandas as pd

csv_file = pd.DataFrame(pd.read_csv("data.csv", sep = ",", header = 0, index_col = False))
csv_file.to_json("data.json", orient = "records", lines = True, date_format = "iso", double_precision = 10, force_ascii = True, date_unit = "ms", default_handler = None)

按原样,将每列转换为 json 键:值。

如何添加到此代码以实现我想要的输出?

【问题讨论】:

  • 您的 csv 是否只有 1 行数据?还是有几个?如果是后者,你将如何返回 JSON?
  • @QuangHoang 不,它有数千行。参数lines = True用于将每个csv行输出到一个新行的json对象中。

标签: python pandas


【解决方案1】:

IIUC 尝试先按行创建嵌套对象,然后创建 JSON:

import pandas as pd

csv_file = pd.read_csv("data.csv", sep=",",
                       header=0, index_col=False)

# Create Nested dict (Object)
csv_file['Residence'] = csv_file[['City', 'State', 'Zipcode']].apply(
    lambda s: s.to_dict(), axis=1
)
# Write out Name and Residence Only
csv_file[['Name', 'Residence']].to_json("data.json", orient="records",
                                        lines=True, date_format="iso",
                                        double_precision=10, force_ascii=True,
                                        date_unit="ms", default_handler=None)

数据.csv

姓名、城市、州、邮政编码 约翰·多伊,阿克伦,俄亥俄州,44140 简·史密斯,洛杉矶,加利福尼亚,90005

数据.json

{"Name":"John Doe","Residence":{"City":"Akron","State":"OH","Zipcode":44140}} {"Name":"Jane Smith","Residence":{"City":"Los Angeles","State":"California","Zipcode":90005}}

【讨论】:

  • 看起来可以工作 - 在我的 python 示例中,您的第一个代码块(用于创建嵌套对象)会出现在哪里?
  • 紧跟在read_csv 之后。我更新了答案以包含完整的代码。
  • 我知道这超出了范围,将被视为“奖励”,但我如何确保 zipcode 以字符串而不是整数形式输出到 json?我试图在我的代码中的几个不同位置调用str 方法,但我无法让它工作。
  • 读取后嵌套代码前csv_file['Zipcode'] = csv_file['Zipcode'].astype(str)
猜你喜欢
  • 1970-01-01
  • 2020-09-29
  • 2018-09-24
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 2017-06-10
  • 1970-01-01
相关资源
最近更新 更多