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

回答編集履歴

1

NaNに対応

2019/11/17 12:15

投稿

nomuken
nomuken

スコア1627

answer CHANGED
@@ -27,20 +27,29 @@
27
27
  <class 'str'>
28
28
  """
29
29
 
30
- data = data.applymap(lambda x: tuple(np.array(x).astype(np.float)))
30
+ data = data.applymap(lambda x: tuple(np.array(x).astype(np.float)) if np.array(x).ndim != 0 else x)
31
31
  print(data)
32
32
  """
33
33
  A B C D E
34
- 0 (517.5, 669.5) (106.0, 462.0) (396.0, 362.5) (646.5, 377.0) ()
34
+ 0 (517.5, 669.5) (106.0, 462.0) (396.0, 362.5) (646.5, 377.0) NaN
35
35
  1 (516.5, 666.0) (106.0, 458.5) (386.5, 362.5) (654.5, 378.0) (36.5, 459.5)
36
- 2 (506.5, 660.0) (107.0, 454.0) (654.5, 393.0) (386.5, 369.0) ()
36
+ 2 (506.5, 660.0) (107.0, 454.0) (654.5, 393.0) (386.5, 369.0) NaN
37
- 3 (508.0, 661.5) (106.0, 452.5) (380.5, 361.0) (653.0, 394.0) ()
37
+ 3 (508.0, 661.5) (106.0, 452.5) (380.5, 361.0) (653.0, 394.0) NaN
38
- 4 (510.0, 663.0) (106.5, 454.0) (649.5, 388.5) (380.5, 364.0) ()
38
+ 4 (510.0, 663.0) (106.5, 454.0) (649.5, 388.5) (380.5, 364.0) NaN
39
- 5 (107.0, 456.0) (650.5, 390.5) (510.5, 661.5) (383.0, 365.5) ()
39
+ 5 (107.0, 456.0) (650.5, 390.5) (510.5, 661.5) (383.0, 365.5) NaN
40
40
  """
41
41
 
42
+
42
43
  print(type(data.loc[0, 'A'][0]))
43
44
  """
44
45
  <class 'numpy.float64'>
45
46
  """
46
- ```
47
+ ```
48
+ ---
49
+ 私の当初環境ではE列にスペースが入っていたため、NaNが混入していなかったみたいです。
50
+
51
+ スペースを消してNaNを混入した状態に対応してみました。
52
+
53
+ データが入っていれば`data.?.str.split()`によって1次元配列ができています。
54
+ NaNの場合は1次元配列にならずそのままデータが残ります。
55
+ それを`np.array(x).ndim != 0`で見分けます。NaNを別の値にしたい場合は最後のxを別の式に置き換えてください。