我有dataframe“輸入”作為所有行的索引。數以千計。
df1 =
index item name item quantity
input apple 4
input orange 3
input lemon 6
我需要把它變成一個jsonl看起來像這樣的檔案。由于 Shopify GraphQL Admin API 批量匯入的要求,我需要它看起來像這樣。
{ "input": { "item name": "apple", "item quantity": "4"}}
{ "input": { "item name": "orange", "item quantity": "3"}}
{ "input": { "item name": "lemon", "item quantity": "6"}}
我可以df1.to_json(orient='records', lines=True)用來將它轉換成jsonl 沒有索引的樣子
{ "item name": "apple", "item quantity": "4"}}
{ "item name": "orange", "item quantity": "3"}}
{ "item name": "lemon", "item quantity": "6"}}
但是我需要在前面添加鍵“輸入”,但我不知道該怎么做。我是 json 的新手。
我也試過,df1.to_json(orient="index")但它給了我一個錯誤,ValueError: DataFrame index must be unique for orient='index'表明每個索引都必須是唯一的。
任何幫助表示贊賞。干杯
uj5u.com熱心網友回復:
您需要的輸出是:
{ "input": { "item name": "apple", "item quantity": "4"}}
{ "input": { "item name": "orange", "item quantity": "3"}}
{ "input": { "item name": "lemon", "item quantity": "6"}}
orient='index' 在這種情況下不起作用,因為索引不是唯一的。上面的答案看起來很棒。您的預期輸出是單獨的 JSON。
這是一種解決方法,根據您所需的格式,如果您需要相同的格式本身
import pandas as pd
import json
data=[['apple',4],['orange','3'],['lemon',6]]
df=pd.DataFrame(data,columns=['item name','item quantity'])
json_as_str=df.to_json(orient="index")
json_value=json.loads(json_as_str)
string_formatted=[]
for key,val in json_value.items():
string_formatted.append("{'input':%s}" %val)
for i in string_formatted:
i=i.replace("'",'"')
print(i)
輸出:
{"input":{"item name": "apple", "item quantity": 4}}
{"input":{"item name": "orange", "item quantity": 3}}
{"input":{"item name": "lemon", "item quantity": 6}}
uj5u.com熱心網友回復:
假設您的資料框是這樣的:
In [93]: df
Out[93]:
index item_name item_quantity
0 input1 apple 4
1 input2 orange 3
2 input3 lemon 6
您可以df.set_index與df.T和一起使用to_dict:
In [95]: df.set_index('index').T.to_dict()
Out[95]:
{'input1': {'item_name': 'apple', 'item_quantity': 4},
'input2': {'item_name': 'orange', 'item_quantity': 3},
'input3': {'item_name': 'lemon', 'item_quantity': 6}}
或者,如果您愿意json,請執行以下操作:
In [96]: df.set_index('index').T.to_json()
Out[96]: '{"input1":{"item_name":"apple","item_quantity":4},"input2":{"item_name":"orange","item_quantity":3},"input3":{"item_name":"lemon","item_quantity":6}}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350807.html
下一篇:根據一行值洗掉多行
