回答編集履歴

1

NaNに対応

2019/11/17 12:15

投稿

nomuken
nomuken

スコア1627

test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
 
58
58
 
59
- data = data.applymap(lambda x: tuple(np.array(x).astype(np.float)))
59
+ data = data.applymap(lambda x: tuple(np.array(x).astype(np.float)) if np.array(x).ndim != 0 else x)
60
60
 
61
61
  print(data)
62
62
 
@@ -64,19 +64,21 @@
64
64
 
65
65
  A B C D E
66
66
 
67
- 0 (517.5, 669.5) (106.0, 462.0) (396.0, 362.5) (646.5, 377.0) ()
67
+ 0 (517.5, 669.5) (106.0, 462.0) (396.0, 362.5) (646.5, 377.0) NaN
68
68
 
69
69
  1 (516.5, 666.0) (106.0, 458.5) (386.5, 362.5) (654.5, 378.0) (36.5, 459.5)
70
70
 
71
- 2 (506.5, 660.0) (107.0, 454.0) (654.5, 393.0) (386.5, 369.0) ()
71
+ 2 (506.5, 660.0) (107.0, 454.0) (654.5, 393.0) (386.5, 369.0) NaN
72
72
 
73
- 3 (508.0, 661.5) (106.0, 452.5) (380.5, 361.0) (653.0, 394.0) ()
73
+ 3 (508.0, 661.5) (106.0, 452.5) (380.5, 361.0) (653.0, 394.0) NaN
74
74
 
75
- 4 (510.0, 663.0) (106.5, 454.0) (649.5, 388.5) (380.5, 364.0) ()
75
+ 4 (510.0, 663.0) (106.5, 454.0) (649.5, 388.5) (380.5, 364.0) NaN
76
76
 
77
- 5 (107.0, 456.0) (650.5, 390.5) (510.5, 661.5) (383.0, 365.5) ()
77
+ 5 (107.0, 456.0) (650.5, 390.5) (510.5, 661.5) (383.0, 365.5) NaN
78
78
 
79
79
  """
80
+
81
+
80
82
 
81
83
 
82
84
 
@@ -89,3 +91,19 @@
89
91
  """
90
92
 
91
93
  ```
94
+
95
+ ---
96
+
97
+ 私の当初環境ではE列にスペースが入っていたため、NaNが混入していなかったみたいです。
98
+
99
+
100
+
101
+ スペースを消してNaNを混入した状態に対応してみました。
102
+
103
+
104
+
105
+ データが入っていれば`data.?.str.split()`によって1次元配列ができています。
106
+
107
+ NaNの場合は1次元配列にならずそのままデータが残ります。
108
+
109
+ それを`np.array(x).ndim != 0`で見分けます。NaNを別の値にしたい場合は最後のxを別の式に置き換えてください。