回答編集履歴
8
f
answer
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
だとえばdf.columnsに、変なラベルを代入しようとすると例外が出ます。
|
7
7
|
|
8
8
|
|
9
|
-
**プロパティ**とは、かんたんにいえば、pythonにお
|
9
|
+
**プロパティ**とは、かんたんにいえば、pythonにおいては、下記のような、オブジェクトのデータの読み込みや書き込みを制御するためのスマートな仕組みです。(JavaやC#など他の主要なプログラミング言語でも大抵似たような仕組みはあります)
|
10
10
|
|
11
11
|
|
12
12
|
|
7
f
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#プロパティ
|
2
2
|
`df.dtypes`や`df.columns`が()を使わずに用いることができるのは、それらが[プロパティとして](https://github.com/pandas-dev/pandas/blob/master/pandas/core/apply.py#L121)[実装されている](https://github.com/pandas-dev/pandas/blob/master/pandas/core/series.py#L436)からです。
|
3
3
|
|
4
|
-
プロパティとして実装されていることによって、コード上、あたかも属性を直接扱うかのように代入や読み取りができる一方、代入や読み取りの際に、値のチェック等
|
4
|
+
プロパティとして実装されていることによって、コード上、あたかも属性を直接扱うかのように代入や読み取りができる一方、代入や読み取りの際に、関数と同様に、たとえば値のチェック等、付随する処理も行うことが可能です。
|
5
5
|
|
6
6
|
だとえばdf.columnsに、変なラベルを代入しようとすると例外が出ます。
|
7
7
|
|
@@ -54,9 +54,9 @@
|
|
54
54
|
とすると、1,2,6と表示され、最後はValueErrorが発生します。
|
55
55
|
|
56
56
|
初期状態ではギアが1,
|
57
|
-
次はギアを1段階上げ
|
57
|
+
次はギアを1段階上げるので2になります。
|
58
58
|
|
59
|
-
(ここまでは、単なる属性
|
59
|
+
(ここまでは、単なるCarクラスのインスタンス属性としてgearを作った場合と変わりません)
|
60
60
|
|
61
61
|
次でさらに9段階上げようとしてますが、@setter内でギアの上限がチェックされているため、
|
62
62
|
(安全に)6までしかギアが上がりません。
|
6
f
answer
CHANGED
@@ -87,9 +87,9 @@
|
|
87
87
|
しかし、pandasの偉い人たちはそういうアプローチはとっていません。
|
88
88
|
|
89
89
|
これは、
|
90
|
-
**dtypes(型)やcolumns(列の
|
90
|
+
**dtypes(型の一覧)やcolumns(列の一覧)は、処理というよりも、より「属性」に近いものであるから**
|
91
91
|
ではないかと勝手に推測してます。
|
92
92
|
|
93
93
|
逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。
|
94
94
|
|
95
|
-
(もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」とか「dtypesは型
|
95
|
+
(もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」とか「dtypesは型を列挙して返すから処理ともいえるじゃないか」いう意見もあるかもしれませんが)
|
5
fソース追加
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#プロパティ
|
2
|
-
`df.
|
2
|
+
`df.dtypes`や`df.columns`が()を使わずに用いることができるのは、それらが[プロパティとして](https://github.com/pandas-dev/pandas/blob/master/pandas/core/apply.py#L121)[実装されている](https://github.com/pandas-dev/pandas/blob/master/pandas/core/series.py#L436)からです。
|
3
3
|
|
4
4
|
プロパティとして実装されていることによって、コード上、あたかも属性を直接扱うかのように代入や読み取りができる一方、代入や読み取りの際に、値のチェック等の付随する処理も行われるようになっています。
|
5
5
|
|
@@ -81,15 +81,15 @@
|
|
81
81
|
# 使い分けの基準
|
82
82
|
|
83
83
|
もちろん上記のdtypesやcolumnsも、
|
84
|
-
df.
|
84
|
+
df.dtypes()
|
85
85
|
df.columns()
|
86
86
|
みたいに関数として定義することも可能なはずです。
|
87
87
|
しかし、pandasの偉い人たちはそういうアプローチはとっていません。
|
88
88
|
|
89
89
|
これは、
|
90
|
-
**
|
90
|
+
**dtypes(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから**
|
91
91
|
ではないかと勝手に推測してます。
|
92
92
|
|
93
93
|
逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。
|
94
94
|
|
95
|
-
(もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」という意見もあるかもしれませんが)
|
95
|
+
(もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」とか「dtypesは型の一覧を返すから処理ともいえるじゃないか」いう意見もあるかもしれませんが)
|
4
f
answer
CHANGED
@@ -78,14 +78,16 @@
|
|
78
78
|
・データフレーム内のデータの合計という処理を行って、合計値を返す
|
79
79
|
という純粋な処理なので、関数として定義されているものと思われます。
|
80
80
|
|
81
|
+
# 使い分けの基準
|
81
82
|
|
82
83
|
もちろん上記のdtypesやcolumnsも、
|
83
84
|
df.dtype()
|
84
85
|
df.columns()
|
86
|
+
みたいに関数として定義することも可能なはずです。
|
85
|
-
|
87
|
+
しかし、pandasの偉い人たちはそういうアプローチはとっていません。
|
86
88
|
|
87
89
|
これは、
|
88
|
-
|
90
|
+
**dtype(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから**
|
89
91
|
ではないかと勝手に推測してます。
|
90
92
|
|
91
93
|
逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。
|
3
f
answer
CHANGED
@@ -85,10 +85,9 @@
|
|
85
85
|
みたいに関数として定義することも可能なはずですが、pandasの偉い人たちはそういうアプローチはとっていません。
|
86
86
|
|
87
87
|
これは、
|
88
|
-
dtype(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから
|
88
|
+
dtype(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから
|
89
|
+
ではないかと勝手に推測してます。
|
89
90
|
|
90
|
-
じゃないかと勝手に推測してます。
|
91
|
-
|
92
91
|
逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。
|
93
92
|
|
94
|
-
(もちろん「sum
|
93
|
+
(もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」という意見もあるかもしれませんが)
|
2
f
answer
CHANGED
@@ -76,18 +76,19 @@
|
|
76
76
|
`df.isnull()`や`df.sum()`はそれぞれ、
|
77
77
|
・nullかどうかチェックして真偽値を返す、
|
78
78
|
・データフレーム内のデータの合計という処理を行って、合計値を返す
|
79
|
-
|
79
|
+
という純粋な処理なので、関数として定義されているものと思われます。
|
80
80
|
|
81
81
|
|
82
|
-
|
83
82
|
もちろん上記のdtypesやcolumnsも、
|
84
83
|
df.dtype()
|
85
84
|
df.columns()
|
86
|
-
みたいに関数として定義すること
|
85
|
+
みたいに関数として定義することも可能なはずですが、pandasの偉い人たちはそういうアプローチはとっていません。
|
87
86
|
|
88
|
-
|
87
|
+
これは、
|
89
|
-
|
88
|
+
dtype(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから
|
90
89
|
|
91
|
-
|
90
|
+
じゃないかと勝手に推測してます。
|
92
91
|
|
92
|
+
逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。
|
93
|
+
|
93
|
-
(
|
94
|
+
(もちろん「sum()はデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」という意見もあるかもしれませんが)
|
1
f
answer
CHANGED
@@ -63,7 +63,7 @@
|
|
63
63
|
|
64
64
|
また、文字列をギアに設定しようとすると、@setter内で例外を発生させています。
|
65
65
|
|
66
|
-
このようにプロパティを使うことで、あたかもの属性を直接操作するようにコードを書くことで
|
66
|
+
このようにプロパティを使うことで、あたかもの属性を直接操作するようにコードを書くことができる一方で、代入時のチェックを実現してます。
|
67
67
|
|
68
68
|
@getterや@ deleterを使うことで読み取り時や削除時の処理も記述できます。
|
69
69
|
|