web-dev-qa-db-ja.com

所定の場所にあるデータフレームに関数を適用する方法

_norm.cdf_in placeon _numpy.array_のようなscipy関数を使用する方法はありますか? (または_pandas.DataFrame_)、_numpy.apply_のバリアントを使用、 _numpy.apply_along_axs_ など?


背景は、ノルム分布のCDF値に変換したいzスコア値のテーブルがあります。私は現在、これにscipyから _norm.cdf_ を使用しています。

現在、数値以外の値を持つデータフレームを操作しています。

_      Name      Val1      Val2      Val3      Val4 
0        A -1.540369 -0.077779  0.979606 -0.667112   
1        B -0.787154  0.048412  0.775444 -0.510904   
2        C -0.477234  0.414388  1.250544 -0.411658   
3        D -1.430851  0.258759  1.247752 -0.883293   
4        E -0.360181  0.485465  1.123589 -0.379157
_

Name変数をインデックスにすることは解決策ですが、私の実際のデータセットでは、名前はアルファベット文字ではありません。)

数値データのみを変更するには、 df._get_numeric_data() データフレームの数値データを含むデータフレームを返すプライベート関数を使用しています。ただし、set関数はありません。したがって、私が呼び出す場合

_norm.cdf(df._get_numeric_data)
_

これにより、dfの元のデータが変更されることはありません。

数値データフレームinplaceに_norm.cdf_を適用してこれを回避しようとしているので、これにより元のデータセットが変更されます。

12
hlin117

私は私が好むと思います select_dtypes 以上_get_numeric_data

In [11]: df.select_dtypes(include=[np.number])
Out[11]:
       Val1      Val2      Val3      Val4
0 -1.540369 -0.077779  0.979606 -0.667112
1 -0.787154  0.048412  0.775444 -0.510904
2 -0.477234  0.414388  1.250544 -0.411658
3 -1.430851  0.258759  1.247752 -0.883293
4 -0.360181  0.485465  1.123589 -0.379157

Applyはインプレースを提供しませんが、次のようなことを行うことができます(とにかく、より明確であると私は主張します)。

num_df = df.select_dtypes(include=[np.number])
df[num_df.columns] = norm.cdf(num_df.values)
6
Andy Hayden