【问题标题】:How to turn a dataframe to jsonl with similar index for every line?如何将数据框转换为每行具有相似索引的 jsonl?
【发布时间】:2021-12-20 00:51:45
【问题描述】:

我有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',表明每个索引都必须是唯一的。

感谢任何帮助。干杯

【问题讨论】:

  • 你好,是索引列名,还是原来的索引
  • Hiiii。它的原始索引。我也可以让它成为一个普通的专栏,我认为这并不重要

标签: python json pandas jsonlines


【解决方案1】:

您需要的输出是:

{ "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)
with open("file_name_here.jsonl","a") as fh:
    for i in string_formatted:
        i=i.replace("'",'"')
        fh.write(f"{i}\n")

输出:

{"input":{"item name": "apple", "item quantity": 4}}
{"input":{"item name": "orange", "item quantity": 3}}
{"input":{"item name": "lemon", "item quantity": 6}}

【讨论】:

  • 有没有办法将所有输出转换成一个 jsonl 文件,而不是一一打印成字符串?
  • 嗨@JJasperr 编辑了答案。现在将写入文件
  • 这太棒了。谢谢好心的先生
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2021-12-24
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多