teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2019/09/12 09:26

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -26,4 +26,41 @@
26
26
  上記以外での質問について
27
27
  --
28
28
  要件しだいです。回転などの図形変換が適用される可能性があれば4列では足りません。
29
- 逆に矩形が変わらないのなら先に面積を算出しておいて別列として持っておくことも考えます。
29
+ 逆に矩形が変わらないのなら先に面積を算出しておいて別列として持っておくことも考えます。
30
+
31
+
32
+ コメント(データ内容)をうけて
33
+ --
34
+
35
+ 提示データに沿ってコード修正しました。2行以上でもデータフレーム化できます。
36
+ ただし提示データ中の「'」は「"」に置き換えています。
37
+ ```Python
38
+ import pandas as pd
39
+ from io import StringIO
40
+
41
+ def f(row):
42
+ lst = row['area'] # 元からリストとして格納されている
43
+
44
+ xs = [pt['x'] for pt in lst]
45
+ ys = [pt['y'] for pt in lst]
46
+
47
+ row['left'] = min(xs)
48
+ row['top'] = max(ys)
49
+ row['right'] = max(xs)
50
+ row['bottom'] = min(ys)
51
+
52
+ return row
53
+
54
+ # 提示データ
55
+ s = """{ "ia" : { "$oid" : "4df" }, "ib" : 1, "area" : [ {"x": "9.2", "y": "77"}, {"x": "19", "y": "20"}, {"x": "19", "y": "77"}, {"x": "9.2", "y": "20"} ]}
56
+ { "ia" : { "$oid" : "4df" }, "ib" : 1, "area" : [ {"x": "7.2", "y": "11"}, {"x": "16", "y": "15"}, {"x": "16", "y": "11"}, {"x": "7.2", "y": "15"} ]}"""
57
+
58
+ df = pd.read_json(StringIO(s), lines=True, encoding='utf-8')
59
+
60
+ df = df.apply(f,axis=1)
61
+ df.drop(columns='area', inplace=True)
62
+ print(df)
63
+ # ia ib left top right bottom
64
+ #0 {'$oid': '4df'} 1 19 77 9.2 20
65
+ #1 {'$oid': '4df'} 1 16 15 7.2 11
66
+ ```