csv Python JSON问题

taor4pac  于 2023-04-27  发布在  Python
关注(0)|答案(2)|浏览(111)

我是一个完全的初学者,目前正在尝试学习python。现在对象是我最大的问题。我有一个简单的项目,我请求一个REST API,响应是json,看起来有点像这样:

{
"x": 1,
"y": 2,
"z": [
      {"a": 1, "b": 1, "c": 1}
      {"a": 3, "b": 4, "c": 5}]
}

现在,我需要为我的csv列添加类似的内容:对于z[]中的每一项:a,B,c,x,y
我有几个1000页的响应。你会如何解决这个问题?现在我在一个单独的列中得到对象。使用pandas写入csv:

data = response.json()
df = pd.DataFrame(data)
df.to_csv("output.csv")
bvhaajcl

bvhaajcl1#

如果你只想把z列中的记录写入CSV文件:

data = {"x": 1, "y": 2, "z": [{"a": 1, "b": 1, "c": 1}, {"a": 3, "b": 4, "c": 5}]}
df = pd.DataFrame(data["z"])
df.to_csv("output.csv", index=None)

如果你想把所有的数据都写到文件中,你可以使用pd.json_normalize来创建dataframe:

data = {"x": 1, "y": 2, "z": [{"a": 1, "b": 1, "c": 1}, {"a": 3, "b": 4, "c": 5}]}
df = pd.json_normalize(data, record_path="z", meta=["x", "y"])
df.to_csv("output.csv", index=None)

对于示例df,将看起来像:

a  b  c  x  y
0  1  1  1  1  2
1  3  4  5  1  2
j7dteeu8

j7dteeu82#

我把你的问题(像Timus一样)解释为你想从:

{
    "x": 1,
    "y": 2,
    "z": [
        {"a": 1, "b": 1, "c": 1},
        {"a": 3, "b": 4, "c": 5}
    ]
}

a,b,c,x,y
1,1,1,1,2
3,4,5,1,2

即使这是正确的,请编辑您的问题,并包括预期的输出CSV。
你也可以不使用Pandas,使用csv模块来实现。
对于每个对象,循环z中的对象,并写入a、b和c列,沿着x和y:

data = {
    "x": 1,
    "y": 2,
    "z": [
        {"a": 1, "b": 1, "c": 1},
        {"a": 3, "b": 4, "c": 5},
    ],
}

with open("output.csv", "w", newline="") as f_out:
    writer = csv.writer(f_out)
    writer.writerow(["a", "b", "c", "x", "y"])  # write the header row, if you want it

    x = data["x"]
    y = data["y"]

    for z_obj in data["z"]:
        a = z_obj["a"]
        b = z_obj["b"]
        c = z_obj["c"]

        writer.writerow([a, b, c, x, y])

相关问题