我是否有办法使用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 来避免这种情况,因此这会更改我的原始数据集。
答案 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)