如何将函数应用于数据框到位

时间:2015-02-22 18:01:39

标签: python pandas scipy vectorization

我是否有办法使用numpy.array(或pandas.DataFrame)的变体numpy.apply(或scipy)使用像norm.cdf 这样的scipy函数 1}},numpy.apply_along_axs等?


背景是,我有一个z得分值表,我想将其转换为规范分布的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 中的norm.cdf进行此操作。

我目前正在操作具有非数字值的数据框。

Name

(使set变量成为索引是一种解决方案,但在我的实际数据集中,名称不是字母字符。)

要仅修改数字数据,我使用df._get_numeric_data()私有函数返回包含数据框数字数据的数据框。但是,没有norm.cdf(df._get_numeric_data) 功能。因此,如果我打电话

df

这不会改变norm.cdf的原始数据。

我试图通过将{{1}}应用于数字数据框 inplace 来避免这种情况,因此这会更改我的原始数据集。

1 个答案:

答案 0 :(得分:6)

我认为我希望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

虽然申请不提供就地,但您可以做以下事情(我认为这样更明确):

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