質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

2062閲覧

pandasでアクセサについて

akaunto

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

1クリップ

投稿2021/02/11 10:22

PandasのSeriesを勉強しています。アクセサという概念がよくわからないです。
関数やメソッドに該当するのでしょうか?

Series.apply(str)のstr部分はアクセサに当たるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Series.apply(str)のstr部分はアクセサに当たるのでしょうか?

いいえ、pandasのアクセサではありません。

日時、文字列などについて、なるべくapplyを使わないで済むようにしたものがpandasのアクセサなのだと思います。

たとえば、

sr_a=sr[sr.apply(str).str.contains('7',na=False,regex=False)]
という式をapplyだけを使って書くと
sr_a=sr[sr.apply(lambda x: '7' in str(x))]
となります。

applyは包丁のように何にでも使える道具です。それに対して、pandasのアクセサは皮むき器とかリンゴの芯抜き器とかパイナップルの芯抜き器のように特定の目的に特化した道具です。どちらを使うかは、使う人の好みによります。(私は記憶力が悪いので、たくさんの道具を覚えきれないので、applyのような道具を使って何でもやってしまう方が合っています)

関数やメソッドに該当するのでしょうか?

まず、何がpandasのアクセサなのかを説明します。

pandas.Seriesのインスタンスをsrとするとき、

  1. sr.strという式はpandasのアクセサか?

わたしはpandasのアクセサだとは思いません。しかしこれをアクセサだと言う人がいるかもしれません。
2. x = sr.strとしたとき、xはpandasのアクセサか?
エラーが出なければxはpandasのアクセサです。
3. sr.str.containsはpandasのアクセサか?
違います。これはpandasのアクセサのメソッドです。

次に、関数やメソッドについて説明します。
まず、intやfloatやstrは関数ではありません。変換関数だと書いてあるサイトがありますが、私は間違いだと思っています。これは公式マニュアルにも問題があって、組み込み関数の一覧の中にintなどが含まれています。ただしそこからリンクされている詳しい説明の部分を見るとクラスだと書いてあります。

最も狭い意味での関数は、inspect.isfunctionで調べてTrueになるものです。

python

1>>> import inspect 2>>> def afunction(): 3... pass 4>>> print(inspect.isfunction(afunction)) 5True 6>>> print(afunction) 7<function afunction at 0x000002B1F561E700>

上記は誤解の余地のない定義ですが、少し問題もあります。

python

1>>> print(inspect.isfunction(max)) 2False 3>>> print(max) 4<built-in function max>

最大値を求める組み込み関数maxは関数ではないことになります。

この他にも、numpyの三角関数をみてみると、これも関数ではないことになります。

python

1>>> import numpy 2>>> print(inspect.isfunction(numpy.sin)) 3False 4>>> print(numpy.sin) 5<ufunc 'sin'>

このように人によって関数やメソッドの定義は違います。
しかし、()を付けて呼び出すことができないものがpythonの関数やメソッドでないことに異論を唱える人は少ないでしょう。(私は少数派です)

pandasのアクセサは関数やメソッドに該当するのでしょうか?という質問だとすると、「該当」の意味が問題になりますが、引数を付けて呼び出せないという意味では、該当しません。

投稿2021/02/12 02:42

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akaunto

2021/02/12 20:47

ありがとうございます。なんとなく理解できました。 違和感があったところは、apply()の引数にstrが入っていたところでした。 strという関数があり、関数名のstrがapplyの引数に入り、apply(str)となっている。 ただ関数やメソッドなのかというには、定義自体が曖昧なので関数かクラスなのかはっきりしてませんよ。ということで間違いないですよね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問