回答編集履歴

3

Update

2021/11/08 08:08

投稿

melian
melian

スコア20675

test CHANGED
@@ -68,9 +68,9 @@
68
68
 
69
69
  # iloc[:] を作用させることでビュー(参照)になる
70
70
 
71
- >>> df1.iloc[:]['請求書発行日']._check_setitem_copy() is None
71
+ >>> print(df1.iloc[:]['請求書発行日']._check_setitem_copy())
72
72
 
73
- True
73
+ None
74
74
 
75
75
  ```
76
76
 
@@ -96,15 +96,15 @@
96
96
 
97
97
 
98
98
 
99
- >>> df1['請求書発行日']._check_setitem_copy() is None
99
+ >>> print(df1['請求書発行日']._check_setitem_copy())
100
100
 
101
- True
101
+ None
102
102
 
103
103
 
104
104
 
105
- >>> df1['請求書発行日']._is_copy is None
105
+ >>> print(df1['請求書発行日']._is_copy)
106
106
 
107
- True
107
+ None
108
108
 
109
109
  ```
110
110
 

2

Update

2021/11/08 08:08

投稿

melian
melian

スコア20675

test CHANGED
@@ -19,3 +19,95 @@
19
19
  df1.iloc[:]['請求書発行日'] = df1['請求書発行日'].fillna(df1['支払期日'])
20
20
 
21
21
  ```
22
+
23
+
24
+
25
+ **追記**
26
+
27
+ > 何故、抽出される行数によって変わるのか、df1.iloc[:]['請求書発行日']と記述しないといけないのか
28
+
29
+
30
+
31
+ まず、`SettingWithCopyWarning` というメッセージを出力しているのは `_check_setitem_copy()` というメソッドなのです。
32
+
33
+
34
+
35
+ ```python
36
+
37
+ >>> df1
38
+
39
+ 建物コード 建物名称 法人コード ...
40
+
41
+ 0 00006601 建物1 47608 ...
42
+
43
+
44
+
45
+ [1 rows x 21 columns]
46
+
47
+
48
+
49
+ >>> df1['請求書発行日']._check_setitem_copy()
50
+
51
+ sys:1: SettingWithCopyWarning:
52
+
53
+ A value is trying to be set on a copy of a slice from a DataFrame.
54
+
55
+ Try using .loc[row_indexer,col_indexer] = value instead
56
+
57
+
58
+
59
+ See the caveats in the documentation: ...
60
+
61
+
62
+
63
+ >>> df1['請求書発行日']._is_copy
64
+
65
+ <weakref at 0x7f5ea05dff90; to 'DataFrame' at 0x7f5eb75e7550>
66
+
67
+
68
+
69
+ # iloc[:] を作用させることでビュー(参照)になる
70
+
71
+ >>> df1.iloc[:]['請求書発行日']._check_setitem_copy() is None
72
+
73
+ True
74
+
75
+ ```
76
+
77
+
78
+
79
+ 複数の行が選択される場合はビューになります。
80
+
81
+ ```python
82
+
83
+ >>> df1
84
+
85
+ 建物コード 建物名称 法人コード ...
86
+
87
+ 0 00006601 建物1 47608 ...
88
+
89
+ 1 00006601 建物1 47608 ...
90
+
91
+ 2 00006601 建物1 47608 ...
92
+
93
+
94
+
95
+ [3 rows x 21 columns]
96
+
97
+
98
+
99
+ >>> df1['請求書発行日']._check_setitem_copy() is None
100
+
101
+ True
102
+
103
+
104
+
105
+ >>> df1['請求書発行日']._is_copy is None
106
+
107
+ True
108
+
109
+ ```
110
+
111
+
112
+
113
+ 残念ながら、「何故、抽出される行数によって変わるのか」については調べていません。

1

Update

2021/11/08 07:52

投稿

melian
melian

スコア20675

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  > # this is in general not a good practice and **we recommend using .loc**.
10
10
 
11
- > df.iloc[0:5]['group'] = 'a'
11
+ > ```df.iloc[0:5]['group'] = 'a'```
12
12
 
13
13
 
14
14