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

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

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

6467閲覧

applyメソッドを使う時

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/04/10 13:56

PythonでSQL文の実行の勉強をしています。
applyメソッドを使う時がわかりません。
テキストに以下のコードが出てきました。

data["hs_directory"]["DBN"]= data["hs_directory"]["dbn"] def pad_csd(num): string_representation = str(num) if len(string_representation) > 1: return string_representation else: return string_representation.zfill(2) data["class_size"]["padded_csd"] = data["class_size"]["CSD"].apply(pad_csd) data["class_size"]["DBN"] = data["class_size"]["padded_csd"] + data["class_size"]["SCHOOL CODE "] print(data["class_size"].head())

というコードがありまして、

data["class_size"]["CSD"].apply(pad_csd)

の一文でapplyメソッドが使われている理由がわかりません。
http://atkonn.blogspot.jp/2008/02/python-python28-apply.html
からapplyメソッドの引数は2つ以上であると思えますが、
どうして一つなのでしょうか?
このコードの書き方だと、pad_csdメソッドの引数を受け取っていないように見えます。
また、上記のコードでapplyメソッドを使って何がしたいのかがわかりません。
applyメソッドを使う時はどういう時なのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

http://atkonn.blogspot.jp/2008/02/python-python28-apply.html

そもそも、上記URLに書いてある apply関数 と pandasのDataFrameが持つ、applyメソッドは全くの別物です。


1. 上記URLの apply関数 は Python2系にあった組み込みの関数です。(そしてこの関数はPython2.3から非推奨の関数となっています。)

https://docs.python.org/2/library/functions.html#apply


2. pandas.DataFrame.apply は1の関数とは別物で、DataFrameクラスのメソッドです。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html

このメソッドは何をしているかというと、DataFrameのデータ一つ一つに対して、引数として渡された関数を適用するという意味です。

python

1data["class_size"]["padded_csd"] = data["class_size"]["CSD"].apply(pad_csd)

これは CSD の列のデータ一つ一つを pad_csd の引数numとして渡して、その結果を padded_csd の列データとしてセットするという意味です。

例えば CSD の列に [10, 1, 30] のようなデータが入ってたとしたら、padded_csd の列には ['10', '01', '30'] のようなデータがセットされます。


3. pad_csd関数は何をやっているのか?

上記にも少し書きましたが、 pad_csd関数は以下のようなことをやっています。

1. num という数値データを引数で受け取る 2. numを文字列にする 3. 文字列が2桁以上であれば、そのままデータを返す 4. 文字列が2桁未満であれば、0で埋めて2桁になるようにする。

単純に関数を実行すると下記のような挙動になります。

python

1pad_csd(10) # => '10' という文字列が返る 2pad_csd(1) # => '01' という文字列が返る

4. applyメソッドはどういう時に使うのか?

今回の例のように、Pandasの DataFrame の特定の列や行のデータに対して一括で特定の関数を適用したい場合に使います。

投稿2017/04/10 15:17

tell_k

総合スコア2120

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

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

退会済みユーザー

退会済みユーザー

2017/04/11 06:16

ありがとうございます。 これは CSD の列のデータ一つ一つを pad_csd の引数numとして渡して、その結果を  padded_csd の列データとしてセットするという意味 について質問なのですが、CSD の列のデータ一つ一つがpad_csd の引数numになっているとわかるのでしょうか? どうして、
tell_k

2017/04/11 06:23

それは 「applyメソッド」がそのような仕様だからですね。 data["class_size"]["CSD"].apply(pad_csd) "CSD" の列に対して、applyメソッドにpad_csd関数を渡してるのでそのように判別がつきます。 PandasのDataframeの扱いについて良くまとまってる記事のURLを貼っておきますので、一度目をとおしてみてください。 http://sinhrks.hatenablog.com/entry/2015/06/18/221747
退会済みユーザー

退会済みユーザー

2017/04/11 07:10

urlを見ました。DataFrame.apply: DataFrame の各列もしくは各行に対して関数を適用。行 / 列の指定は axis キーワードで行う から、applyメソッドは列か行に対してデータの付加を行うことがわかりました。 しかし、今回のapply(pad_csd) だけでは列もしくは行のどちらを指定しているのかわからないと思うのです。 "CSD" の列に対して、applyメソッドにpad_csd関数を渡してるのでそのように判別がつきます。 から思ったのですが、この書き方は"CSD" の列に対してapplyメソッドを付加しているから、"CSD" の列に対してデータを渡しているということでしょうか?そうだとすると、["class_size"]の列にapplyメソッドを渡したいなら、data["class_size"].apply(pad_csd)["CSD"] という書き方になるということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問