首页 > 解决方案 > 在 python pandas 中从相同 csv(我自己的 json 格式)中的值创建一个 Json 列

问题描述

我有一个数据框-

+----------+----------+--------+
|     FNAME|     LNAME|     AGE| JSON FOR EACH CUSTOMER
+----------+----------+--------+
|      EARL|     JONES|      35|   ? 
|      MARK|      WOOD|      20|   ?
+----------+----------+--------+

我有一个 json 格式 -

{
  "applicantSegment": {
    "applicantName": {
      "name1": "" ,
      "name3": "" 
    },
    "ids": [
      {
        "type": "",
        "value": ""
      }
    ],
    "phones": [
      {
        "type": "",
        "value":""  
      }
    ],
    "emails": [
      {
        "value": "" 
      }
    ],
    "dob": {
      "dobDate": "" ,
      "age" : ""  
    }
  }

我需要在数据框中创建一个新的 json 列,以便新列的每一行都有 json 值。例如,第一行的新列值将是 -

{
  "applicantSegment": {
    "applicantName": {
      "name1": "EARL" ,
      "name3": "JONES" 
    },
    "ids": [
      {
        "type": "",
        "value": ""
      }
    ],
    "phones": [
      {
        "type": "",
        "value":""  
      }
    ],
    "emails": [
      {
        "value": "" 
      }
    ],
    "dob": {
      "dobDate": "" ,
      "age": 35  
    }
  }

有人可以帮忙吗?具有新 json 行的必需数据框

+----------+----------+--------+--------------------------------------------------------------
|     FNAME|     LNAME|     AGE| JSON FOR EACH CUSTOMER
+----------+----------+--------+--------------------------------------------------------------
|      EARL|     JONES|      35| {"applicantSegment": {"applicantName{"name1":
|          |                   |  "EARL","name3":"JONES" },"ids": [{"type": "","value": ""}],
|          |                   |  "phones"{"type":"","value":"" }],"emails": [{"value": "" }], 
|          |                   |   "dob": {"dobDate": "" ,"age":35  }}
|----------|----------|--------| ---------------------------------------------------------------                                                                             
|          |                   |  {Same as above but values from this row
|      MARK|      WOOD|      20|                                                }

标签: pythonsqljsonpandasnumpy

解决方案


这是一个 hack,但我之前回答错误并且感觉很糟糕,所以我想我会给你一些至少像你描述的那样有效的东西,直到其他人给出更好的答案。

import pandas as pd
import json

df = pd.DataFrame({'FNAME': ['EARL','MARK'],
                  'LNAME': ['JONES','WOOD'],
                  'AGE': ["35","20"]})

df['json_representation'] = """{ "applicantSegment": { "applicantName": { "name1": """ + df['FNAME'] + """, "name3": """ + df['LNAME'][i] + """  }, "ids": [ { "type": "", "value": "" } ], "phones": [ { "type": "", "value":""  } ], "emails": [ { "value": ""  } ], "dob": { "dobDate": "" , "age" : """ + df['AGE'][i] + """  } } })"""

我认为真正的解决方案是您应该使用 python 字典构建它,但我没有看到您有任何可以用作键的独特项目。

d = {"applicantSegment": { "applicantName": { "name1": "" , "name3": ""  }, "ids": [ { "type": "", "value": "" } ], "phones": [ { "type": "", "value":""  } ], "emails": [ { "value": ""  } ], "dob": { "dobDate": "" , "age" : ""  } } }

s = ""
for i in df.index:
    d.update({ "applicantSegment": { "applicantName": { "name1": df['FNAME'][i] , "name3": df['LNAME'][i]  }, "ids": [ { "type": "", "value": "" } ], "phones": [ { "type": "", "value":""  } ], "emails": [ { "value": ""  } ], "dob": { "dobDate": "" , "age" : df['AGE'][i]  } } })
    s = s + ', ' + json.dumps(d)

s

推荐阅读