【问题标题】:Convert column into Json using Dataframe(python)使用Dataframe(python)将列转换为Json
【发布时间】:2019-05-19 14:31:50
【问题描述】:

来自 API 的 Python #datas

 plan_get = pd.DataFrame(rows, columns=columns) #plan_get return all json data
return Response({"MESSAGE": "FOUND","DATA":json.loads(plan_get.to_json(orient='records'))})

实际输出

        [{
                    "customer_name": "ABI2",
                    "location_name": "Cherai2",
                    "employee_name": "ASU2",
                    "Sales_Plan_Details": "[{\"Month\": \"2019-1\", \"Quantity\": 10, \"Product_Gid\": 3}]"

    },
{
                "customer_name": "ABI",
                "location_name": "Cherai",
                "employee_name": "ASU",
                "Sales_Plan_Details": "[{\"Month\": \"2019-1\", \"Quantity\": 10, \"Product_Gid\": 3}]"

}]

预期输出:

[{
                        "customer_name": "ABI2",
                        "location_name": "Cherai2",
                        "employee_name": "ASU2",
                        "Sales_Plan_Details": [{"Month": "2019-1", 
                     "Quantity": 10, "Product_Gid": 3}]

        },
    {
                    "customer_name": "ABI",
                    "location_name": "Cherai",
                    "employee_name": "ASU",
                    "Sales_Plan_Details": [{"Month": "2019-1", 
                "Quantity": 10, "Product_Gid": 3}]

    }]

这里我使用 pandas DataFrame 来传递 json 数据。我的问题是如何在返回之前将 Sales_Plan_Details(column) 转换为 json 对象。

【问题讨论】:

  • 你想要的输出是什么?请在您的问题中包括这一点。
  • 我希望 Sales_Plan_Details 列到 json 对象
  • 只是Sales_Plan_Details的键?
  • 是的,Sales_Plan_Details 值
  • 是你从语句json.loads(plan_get.to_json(orient='records'))得到的json输出

标签: python pandas dataframe


【解决方案1】:

使用json.loadsast.literal_evalstrings 转换为list of dicts

import ast, json

df = pd.DataFrame(rows) 
df['Sales_Plan_Details'] = df['Sales_Plan_Details'].apply(json.loads)
#alternative solution
#df['Sales_Plan_Details'] = df['Sales_Plan_Details'].apply(ast.literal_eval)

j = df.to_json(orient='records')
print (j)
[{"Sales_Plan_Details":[{"Month":"2019-1","Quantity":10,"Product_Gid":3}],
  "customer_name":"ABI2","employee_name":"ASU2","location_name":"Cherai2"},
{"Sales_Plan_Details":[{"Month":"2019-1","Quantity":10,"Product_Gid":3}],
 "customer_name":"ABI","employee_name":"ASU","location_name":"Cherai"}]

设置:

rows= [{
                    "customer_name": "ABI2",
                    "location_name": "Cherai2",
                    "employee_name": "ASU2",
                    "Sales_Plan_Details": "[{\"Month\": \"2019-1\", \"Quantity\": 10, \"Product_Gid\": 3}]"

    },
{
                "customer_name": "ABI",
                "location_name": "Cherai",
                "employee_name": "ASU",
                "Sales_Plan_Details": "[{\"Month\": \"2019-1\", \"Quantity\": 10, \"Product_Gid\": 3}]"

}]

【讨论】:

  • 非常感谢@jezrael
  • ast.literal_eval 方法对我来说效果很好......谢谢@jezrael
【解决方案2】:

您可以使用list comprehensions 映射Sales_Plan_Details 值。

您可以使用json.loads() 从字符串中反序列化列表值。

import json

dataframe_json = [
    {
                    "customer_name": "ABI2",
                    "location_name": "Cherai2",
                    "employee_name": "ASU2",
                    "Sales_Plan_Details": "[{\"Month\": \"2019-1\", \"Quantity\": 10, \"Product_Gid\": 3}]"

    },
    {
                    "customer_name": "ABI",
                    "location_name": "Cherai",
                    "employee_name": "ASU",
                    "Sales_Plan_Details": "[{\"Month\": \"2019-1\", \"Quantity\": 10, \"Product_Gid\": 3}]"

    }]

# get the "Sales_Plan_Details" key value's from the list
sales_plan_details_nested_list = [sales_plan_details_dict for sales_plan_details_dict in json.loads(item("Sales_Plan_Details")) for item in dataframe_json]

# flatten the list
sales_plan_details_list = [item for sublist in sales_plan_details_nested_list for item in sublist]

# pretty print the list now
print(json.dumps(sales_plan_details_list, indent=True))

【讨论】:

  • @selvakumar 您现在可以查看吗?
  • 感谢您的回复..您的代码真的帮助了我@kunal
猜你喜欢
  • 1970-01-01
  • 2020-11-10
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 2016-12-01
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多