Python:如何为索引设置边界

3

我正在尝试将json文件转换为Excel并进行修改。在对json进行规范化并尝试添加列之后,我会收到一个错误消息,指出轴0的索引20超出了大小19。然而,当我从JSON中规范化3个东西时,我不会收到这个错误,但是当我规范化只有2个东西时,我会收到一个错误。

以下是我的代码:

def get_data(link :str):

  resp = requests.get(link) #reading link
  txt = resp.json()
  data = pd.DataFrame(txt['products']) #data
  return txt

def main():

  #get json data from link
  json = get_data(link = 'https://0f91c5da166bc1b5a70cce01e1f0370c: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@shopeclat.myshopify.com/admin/api/2022-07/products.json')

  v = pd.json_normalize(json['products'], record_path =['variants'],meta=['id','title','body_html', 'vendor','product_type','created_at','updated_at','status','image','tags'],record_prefix='varients_')


  i = pd.json_normalize(json['products'], record_path =['images'],meta=['id','title','body_html', 'vendor','product_type','created_at','updated_at','status','image','tags'],record_prefix='images_')


  #merging all three dataset on id
  df = [v,i]
  final_df = reduce(lambda  left,right: pd.merge(left,right,on=['id'],
                                            how='outer'), df)

  print("Exporting csv files ....")
  final_df.to_csv('Bound.csv',index = False)
  
if __name__ == '__main__':
    main()

没有必要的输入,就没有可行的测试方法。 - BeRT2me
我已经更新了输入。 - peter kim
df 中的 v 和 i 是在哪里定义的? - Scott Boston
@ScottBoston 抱歉我打错了。我已经编辑了代码。V和I已经定义好了,对混淆感到抱歉。 - peter kim
1个回答

0
也许 .explode() 是你想要的:
import requests
import pandas as pd

url = "https://0f91c5da166bc1b5a70cce01e1f0370c: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@shopeclat.myshopify.com/admin/api/2022-07/products.json"


df = (
    pd.DataFrame(requests.get(url).json()["products"])
    .explode("variants")
    .explode("options")
    .explode("images")
)

df = pd.concat(
    [
        df,
        df.pop("variants").apply(pd.Series).add_prefix("v_"),
        df.pop("options").apply(pd.Series).add_prefix("o_"),
        df.pop("images").apply(pd.Series).add_prefix("imgs_"),
    ],
    axis=1,
)

df.to_csv("out.csv", index=False)

创建 out.csv 文件(来自 Libre Office 的截图):

enter image description here


谢谢您的帮助。我不想使用规范化选项。当我使用规范化选项时它可以工作,但是当我不使用规范化选项时会出现错误。 - peter kim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接