【问题标题】:Nested Json to pandas DataFrame with specific format将 Json 嵌套到具有特定格式的 pandas DataFrame
【发布时间】:2016-03-24 08:34:35
【问题描述】:

我需要在 pandas DataFrame 中以某种格式格式化 Json 文件的内容,以便我可以运行 pandassql 来转换数据并通过评分模型运行它。

file = C:\scoring_model\json.js(“文件”的内容如下)

{
"response":{
  "version":"1.1",
  "token":"dsfgf",
   "body":{
     "customer":{
         "customer_id":"1234567",
         "verified":"true"
       },
     "contact":{
         "email":"mr@abc.com",
         "mobile_number":"0123456789"
      },
     "personal":{
         "gender": "m",
         "title":"Dr.",
         "last_name":"Muster",
         "first_name":"Max",
         "family_status":"single",
         "dob":"1985-12-23",
     }
   }
 }

我需要数据框看起来像这样(显然,同一行上的所有值,试图为这个问题尽可能地格式化它):

version | token | customer_id | verified | email      | mobile_number | gender |
1.1     | dsfgf | 1234567     | true     | mr@abc.com | 0123456789    | m      |

title | last_name | first_name |family_status | dob
Dr.   | Muster    | Max        | single       | 23.12.1985

我已经查看了关于这个主题的所有其他问题,尝试了各种将 Json 文件加载到熊猫中的方法

`with open(r'C:\scoring_model\json.js', 'r') as f:`
    c = pd.read_json(f.read())

 `with open(r'C:\scoring_model\json.js', 'r') as f:`
    c = f.readlines()

在这个解决方案中尝试了 pd.Panel() Python Pandas: How to split a sorted dictionary in a column of a dataframe

来自 [yo = f.readlines()] 的数据框结果考虑尝试基于 ("") 拆分每个单元格的内容,并找到一种将拆分内容放入不同列的方法,但到目前为止还没有运气。非常感谢您的专业知识。提前谢谢你。

【问题讨论】:

    标签: python json pandas nested format


    【解决方案1】:

    如果您将整个 json 作为字典(或列表)加载,例如使用json.load,你可以使用json_normalize

    In [11]: d = {"response": {"body": {"contact": {"email": "mr@abc.com", "mobile_number": "0123456789"}, "personal": {"last_name": "Muster", "gender": "m", "first_name": "Max", "dob": "1985-12-23", "family_status": "single", "title": "Dr."}, "customer": {"verified": "true", "customer_id": "1234567"}}, "token": "dsfgf", "version": "1.1"}}
    
    In [12]: df = pd.json_normalize(d)
    
    In [13]: df.columns = df.columns.map(lambda x: x.split(".")[-1])
    
    In [14]: df
    Out[14]:
            email mobile_number customer_id verified         dob family_status first_name gender last_name title  token version
    0  mr@abc.com    0123456789     1234567     true  1985-12-23        single        Max      m    Muster   Dr.  dsfgf     1.1
    

    【讨论】:

    • 太棒了!非常感谢安迪
    • json 数据被加载为 dtype 'object'。为了使用 pandasql 查询转换数据,列中的数据需要是各种数据类型(即“int”、“str”、“timestamp”等),最好的方法是什么?你推荐这里找到的方法吗? link
    • 跟进我上面的评论,最终使用 cast(variable_x as integer) 来转换 pandasql 中的数据
    • 对于熊猫 1.0.0:pd.json_normalize(d)
    • 我们可以将标签名称附加到列以进行跟踪。示例:contact_email、contact_mobileNum 等。如果是大 json,那将非常方便。
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多