Python 如何从列中获取属性height、width、x和y?

Python 如何从列中获取属性height、width、x和y?,python,pandas,csv,Python,Pandas,Csv,我们在一个CSV文件中有1000行具有相同的信息,存储在一列中,如下所示。如何在python中循环并获取属性x、y、height和width [{"task":"T0","task_label":"Draw a box around each person name and transcribe their information.","value":[{"x":224.63333129882812,"y":89.96666717529297,"tool":0,"frame":0,"width"

我们在一个CSV文件中有1000行具有相同的信息,存储在一列中,如下所示。如何在python中循环并获取属性x、y、height和width

[{"task":"T0","task_label":"Draw a box around each person name and transcribe their information.","value":[{"x":224.63333129882812,"y":89.96666717529297,"tool":0,"frame":0,"width":333.9999694824219,"height":42.00000762939453,"details":[{"value":"Rev. Leopold Wyke Acland"},{"value":0}],"tool_label":"Tool name"},{"x":95.63333129882812,"y":55.96666717529297,"tool":0,"frame":0,"width":280,"height":37,"details":[{"value":"Acland, Thomas Wyke"},{"value":0}],"tool_label":"Tool name"}]}]

因为最外面的
列表
只包含一个包含3个字段的对象

  • 任务
    不是必需的
  • 任务标签
    不需要
  • 我们感兴趣的值
  • 在给定的上下文中,我们可以按以下方式循环
    dict

    for item in data[0]["value"]:
        print(f"x = {item['x']}")
        print(f"y = {item['y']}")
        print(f"width = {item['width']}")
        print(f"height = {item['height']}")
    
    您还可以以一种更具python风格的方式收集这些值,然后迭代生成的字典列表

    result = [
                {
                    "x": item["x"], 
                    "y": item["y"], 
                    "width": item["width"], 
                    "height": item["height"]
                 } 
              for item in data[0]["value"]]
    
    我建议用python进行迭代。此外,此代码段假定所有行都具有统一的结构


    如果所有行的格式都相同,您可以遍历这些行并在如下列表中捕获值:

    x, y, height, width = list(), list(), list(), list()
    
    for row in rows:
        x.append(row[0]["value"][0]["x"])
        y.append(row[0]["value"][0]["y"])
        height.append(row[0]["value"][0]["height"])
        width.append(row[0]["value"][0]["width"])
    
    您可以将捕获的值存储为dict,然后将其轻松转换为数据帧:

    d = {"x": x, "y": y, "height": height, "width": width}
    df = pd.DataFrame(data=d)
    

    如果外部列表实际上只包含1个元素,则所有内容都位于
    l[0]['value']

    In [14]: pd.DataFrame(l[0]['value']).iloc[:, :6]
    Out[14]:
                x          y  tool  frame       width     height
    0  224.633331  89.966667     0      0  333.999969  42.000008
    1   95.633331  55.966667     0      0  280.000000  37.000000
    
    如果实际上有多个条目,您可以一次转换一个条目,并使用
    pd.concat

    In [16]: pd.concat([pd.DataFrame(v['value']).iloc[:, :6] for v in l*3]).reset_index(drop=True)
    Out[16]:
                x          y  tool  frame       width     height
    0  224.633331  89.966667     0      0  333.999969  42.000008
    1   95.633331  55.966667     0      0  280.000000  37.000000
    2  224.633331  89.966667     0      0  333.999969  42.000008
    3   95.633331  55.966667     0      0  280.000000  37.000000
    4  224.633331  89.966667     0      0  333.999969  42.000008
    5   95.633331  55.966667     0      0  280.000000  37.000000
    

    你试过什么?你的问题真的就这些吗?我不确定我是否理解您对CSV的描述,您能否至少共享部分文件?请参阅:。