Python 如何从列中获取属性height、width、x和y?
我们在一个CSV文件中有1000行具有相同的信息,存储在一列中,如下所示。如何在python中循环并获取属性x、y、height和widthPython 如何从列中获取属性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"
[{"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的描述,您能否至少共享部分文件?请参阅:。