将csv数据转换为特定格式的嵌套json

2024-01-02

将 csv 数据转换为 json 并添加新的字段名称“parsed_address”并基于地址类型值将放置在 parsed_address 字段中。 我可以创建 parsed_address 字段并将地址列放置在其下方,但地址字段应根据 address_type 放置。我在同一地址类型中获取特定 id 的所有地址,并在下一个地址类型中重复。

输入数据

"source_id"|"first_name"|"last_name"|"address_type"|"address_line_1"|"city"
"41614335"|Reinaldo|Tonkoski Jr.|Primary|Deh 211 Box 2222|Brookings|
"41614335"|Reinaldo|Tonkoski Jr.|home|"2409 10th St Apt 123"|Brookings
"07605348"|E|Christodoulou|Primary|"4D Ag Lavras st"|Kifissia
"07605348"|E|Christodoulou|home|"131 N Hamilton Dr Apt 308"|Beverly Hills

输出获取

[
   {
      "source_id":7605348,
      "first_name":"E",
      "last_name":"Christodoulou",
      "parsed_address":{
         "address_type":"Primary",
         "address":[
            {
               "address_line_1":"Deh 211 Box 2222",
               "city":"Brookings"
            },
            {
               "address_line_1":"4D Ag Lavras st",
               "city":"Kifissia"
            }
         ]
      }
   },
   {
      "source_id":41614335,
      "first_name":"Reinaldo",
      "last_name":"Tonkoski Jr.",
      "parsed_address":{
         "address_type":"home",
         "address":[
            {
               "address_line_1":"2409 10th St Apt 123",
               "city":"Brookings"
            },
            {
               "address_line_1":"131 N Hamilton Dr Apt 308",
               "city":"Beverly Hills"
            }
         ]
      }
   }
]

预期输出

[
   {
      "source_id":7605348,
      "first_name":"E",
      "last_name":"Christodoulou",
      "parsed_address":{
         "address_type":"Primary",
         "address":
            {
               "address_line_1":"Deh 211 Box 2222",
               "city":"Brookings"
            }
         "address_type":"home",
         "address" :
            {
               "address_line_1":"4D Ag Lavras st",
               "city":"Kifissia"
            }

TL;DR

from ast import literal_eval
from io import StringIO
from pprint import pprint

inputs = StringIO(""""source_id"|"first_name"|"last_name"|"address_type"|"address_line_1"|"city"
"41614335"|Reinaldo|Tonkoski Jr.|Primary|Deh 211 Box 2222|Brookings
"41614335"|Reinaldo|Tonkoski Jr.|home|"2409 10th St Apt 123"|Brookings
"07605348"|E|Christodoulou|Primary|"4D Ag Lavras st"|Kifissia
"07605348"|E|Christodoulou|home|"131 N Hamilton Dr Apt 308"|Beverly Hills""")


df = pd.read_csv(inputs, sep='|')

# Format the parsed_address to the dictionary format you want.
df['parsed_address'] = [{'address_type':row['address_type'], 'address':{'address_line_1':row['address_line_1'], 'city':row['city']}} 
                         for _, row in df.iterrows()]

lol = []
# Group by the source_id
for _, group_rows in df.groupby('source_id'):
    # Combine all parse_address for each group
    parsed_address = list(group_rows['parsed_address'])
    # Keeps the values of source_id, first and last name.
    group_rows = group_rows.iloc[0][['source_id', 'first_name', 'last_name']]
    # Set the parsed_address to the list you've combined.
    group_rows['parsed_address'] = parsed_address
    lol.append(group_rows)

js = literal_eval(pd.DataFrame(lol).to_json(orient='records'))

pprint(js)

[out]:

[{'first_name': 'E',
  'last_name': 'Christodoulou',
  'parsed_address': [{'address': {'address_line_1': '4D Ag Lavras st',
                                  'city': 'Kifissia'},
                      'address_type': 'Primary'},
                     {'address': {'address_line_1': '131 N Hamilton Dr Apt 308',
                                  'city': 'Beverly Hills'},
                      'address_type': 'home'}],
  'source_id': 7605348},
 {'first_name': 'Reinaldo',
  'last_name': 'Tonkoski Jr.',
  'parsed_address': [{'address': {'address_line_1': 'Deh 211 Box 2222',
                                  'city': 'Brookings'},
                      'address_type': 'Primary'},
                     {'address': {'address_line_1': '2409 10th St Apt 123',
                                  'city': 'Brookings'},
                      'address_type': 'home'}],
  'source_id': 41614335}]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将csv数据转换为特定格式的嵌套json 的相关文章

随机推荐

  • libopenssl-ruby 的作用是什么?

    在 Ubuntu 中使用 Ruby 时 我需要安装 libopenssl ruby 包 我想知道这个包的用途是什么 它是红宝石吗 它不是宝石 而是延伸 扩展可以打包为 gem 但这个不是 扩展是一个 C 库 可能与一些本机 ruby 代码混
  • Angular.js:输入日期显示日期-1天

    我有一个表格
  • R-Project:xlsx 包安装失败(由于 java 问题)

    我试图安装 xlsx 包 不幸的是 Java 有一个问题 我无法解决 请在下面找到尝试安装 xlsx 包时产生的输出 这是输出 R version 3 1 1 2014 07 10 Sock it to Me Copyright C 201
  • Maven 使用子 POM 中的子路径解析哪些 URL?

    我在某处读到 如果 Maven 项目使用继承 那么它的子项目将自动使用子项目的 URL 添加子路径artifactId 但现在我找不到参考资料了 Maven 将从父 POM 逐字继承哪些继承的 URL 并将为子 POM 添加子路径 例如 以
  • 如何比较 3 个文件(看看它们之间有什么共同点)?

    我想比较 3 个文件 看看文件中有多少信息是相同的 文件格式是这样的 Chr11 447 A C 74 DP 22 AF1 1 CI95 1 1 DP4 0 0 9 8 MQ 15 FQ 78 GT PL GQ 1 1 107 51 0 9
  • 如何在Java中内存映射(mmap)Linux块设备(例如/dev/sdb)?

    我可以使用 Java 读取 写入 Linux 块设备java nio 以下代码有效 Path fp FileSystems getDefault getPath dev sdb FileChannel fc null try fc File
  • 嵌套复杂 JSON 中的搜索键

    我必须通过 JavaScript 或 jQuery 在嵌套 JSON 中搜索键 在我的 JSON 对象中 所有键都是唯一的 我自己尝试了一些解决方案 但它们不起作用 这是我的代码 json app Garden Flowers Red fl
  • 过滤自己的日期字段,未使用有效和/或错误的日期格式

    当对我自己的日期字段进行过滤时 我没有获得预期的记录 而在通过解析默认日期字段进行过滤时 我确实获得了记录 下面的代码应该返回最后提供的 JSON 中的最后两条记录 请注意创建于是默认解析日期字段 而开始日期是我自己的日期字段 因此 在过滤
  • 我可以仅将 Python .pyc 文件部署到 Google App Engine 吗?

    我正在开发一个在 Google App Engine 上使用 Django 的项目 有人问我是否可以将某些代码仅部署为已编译的 所以我想问题是我可以上传一个仅包含相关代码片段的 pyc 文件吗 我已经在应用程序中使用views pyc 文件
  • 哪种类型特征表明该类型是 memcpy 可分配的? (元组、对)

    我想知道我可以执行什么类型自省来检测可通过简单的原始内存复制分配的类型 例如 据我了解 内置类型 内置类型的元组和此类元组的元组都属于此类 动机是如果可能的话我想传输原始字节 T t1 not necessarely default con
  • 创建 (ES6) 承诺而不开始解决它

    使用 ES6 Promise 如何在不定义解决逻辑的情况下创建 Promise 这是一个基本示例 一些 TypeScript var promises function waitFor key string Promise
  • Visual Studio 2013 中的“新建项目”对话框中缺少项目模板

    当我点击文件 gt 新建 gt 项目在 Visual Studio 2013 中 不存在任何项目模板 但是 在解决方案文件中 显然是在 Visual Studio 的另一个版本中创建的 当我尝试时 添加 gt 新项目 所有模板都在那里 我想
  • Swift 中的强引用和弱引用

    在 Objective C 中 您可以将属性定义为具有强引用或弱引用 如下所示 property strong property weak 这是如何快速完成的 直接从斯威夫特语言指南 https developer apple com li
  • MainActivity 关闭后停止服务(已编辑)

    我认为我根本不清楚 我确实希望该服务能够持续存在 即使主要活动通过用户操作被破坏或Android系统这样做 它做得很好 但是当应用程序在某个时刻重新打开时 我会想要检查如果背景活动存在并使用操作按钮停止它 请提前谢谢 我启动了后台服务 在我
  • 我需要做什么才能让 Hash.from_xml() 工作?

    我在代码中安装了 ActiveSupport 并需要 active support 但是当我尝试使用Hash from xml method 我缺少什么 gem list returns LOCAL GEMS activesupport 3
  • 如何从另一个变量名创建变量? [复制]

    这个问题在这里已经有答案了 好的 在 php 中我该怎么做 给定以下场景 array of letters var letters array a b c loop through array and create empty arrays
  • 在最接近的日期合并数据框

    我有一些实验的一些数据 按主题 ID 和日期索引 我想将数据连接在一起 但受试者可能在不同的日子进行实验 这是我的意思的一个例子 下图是两个不同实验的结果 SubjectID Date ScoreA 1 2016 09 20 10 1 20
  • Java 10 'var' 和继承

    经过审查后var所见特征here http openjdk java net jeps 286 我在使用 JDK 10 设置 Eclipse IntelliJ IDEA IDE 时遇到了困难 因此向拥有 Java 10 工作环境的 Stac
  • POSIX 目录名的 PowerShell 等效项

    这个问题 https stackoverflow com questions 778135 how do i get the equivalent of dirname in a batch file询问如何在批处理脚本中获取路径的目录名称
  • 将csv数据转换为特定格式的嵌套json

    将 csv 数据转换为 json 并添加新的字段名称 parsed address 并基于地址类型值将放置在 parsed address 字段中 我可以创建 parsed address 字段并将地址列放置在其下方 但地址字段应根据 ad