DataFrameの各セルに関数を適用します


88

次のようなデータフレームがあります。

A        B        C
foo      bar      foo bar
bar foo  foo      bar

各行のすべての要素(または各列のすべての要素)を調べて、次の関数を適用して後続のDFを取得したいと思います。

def foo_bar(x):
    return x.replace('foo', 'wow')

A        B        C
wow      bar      wow bar
bar wow  wow      bar

各セルに機能を適用できるシンプルなワンライナーはありますか?

これは単純な例であるため、関数を適用する以外にこの特定の例を実行する簡単な方法があるかもしれませんが、私が本当に求めているのは、データフレーム内のすべてのセルに関数を適用する方法です。


9
古い質問への回答がすでに得られたら、以前の回答が無効になるため、質問を完全に新しい質問に編集するのは良い考えではないと思います。元の質問をロールバックして、新しい質問とは別に質問してください。
Nickil Maveli 2016

回答:


125

あなたのapplymap()場合に簡潔なものを使用することができます。

df.applymap(foo_bar)

#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar

別のオプションは、関数をベクトル化してからapplyメソッドを使用することです。

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar

申し訳ありませんが、質問は関数の適用に関するものであり、実際にはどのセルが偶数であるかを把握することではありません。..私はより明確にするために例を変更できるなら、私は見てみましょう
eljusticiero67

1
関数の適用を探している場合は、次のことができますimport numpy as np; df.apply(np.vectorize(iseven))
Psidom 2016

2
@ eljusticiero67を使用できますdf.applymap(iseven)が、大きなDataFrameの場合は非常に遅くなるため、機会があればいつでもベクトル化されたメソッドを使用してください。
ayhan 2016

@ ayhan-np.vectorizeがある場合とない場合の両方で、メソッドが機能しているようです。クレジットを差し上げますので、回答を投稿していただけませんか。
eljusticiero67 2016

1
これをリンクする重複を見つけようとしていたので、実際には最初は投稿しませんでした。正確な重複は見つかりませんでしたが、おそらくこれですか?Nickil Maveliは正しいですが、意味を明確にすることはできますが、少なくとも例は同じだと思います。たぶん、Psidomはapplymapと一緒に独自の提案を含めるように編集できますか?
ayhan 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.