簡體   English   中英

如何將函數應用於數據框到位

[英]How to apply function to dataframe in place

有沒有一種方法,我可以使用像SciPy的功能norm.cdf到位 numpy.array (或pandas.DataFrame ),使用的變體numpy.applynumpy.apply_along_axs等?


背景是,我有一個z得分值表,我想將其轉換為規范分布的CDF值。 我目前正在使用norm.cdfscipy

我目前正在操縱具有非數字值的數據幀。

      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的原始數據。

我試圖通過向規避這一norm.cdf為數字數據幀就地 ,所以這改變了我的原始數據集。

我想我更喜歡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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM