【发布时间】:2019-04-10 01:41:54
【问题描述】:
我正在尝试创建一个将返回的自定义 DataFrame.describe() 函数
- numpy 统计数据
- scipy 统计数据
- 来自某些来源的分位数
这应该会重现我的问题
# Python 3.6.6, Pandas 0.22.0
import pandas as pd
import numpy as np
import scipy.stats as sc
d = pd.DataFrame(np.random.randint(0,10, size=100000))
d.apply(np.mean) #Works
d.apply(np.std) #Works
d.apply(sc.kurtosis) #Works
d.apply([np.mean, np.std]) #Works
d.apply([np.mean, sc.kurtosis]) # Gets stuck
如果我包含 scipy 函数,它将永远运行,但如果我只使用 numpy.如果有更好的方法可以使用我自己的统计输出自定义列表来模拟 pd.DataFrame.describe() 的输出,我也愿意接受。
【问题讨论】:
-
你的意思是
sc.stats.kurtosis?另外,什么版本的熊猫?据我所知pd.DataFrame.apply不接受函数列表。 -
是的,我愿意。我正在使用更新版本的熊猫,这可能是它接受列表的原因,因为我的代码运行没有错误。我在上面更新以反映您的。
-
您在使用列表推导时是否发现与我的解决方案相同的问题?
-
您的解决方案运行良好。现在唯一的问题是我可能可以配置的输出。我现在看到 np.mean 返回一个 float64 而 sc.kurtosis 返回一个 1 元素数组。我怀疑这与我的方法的问题有关。
-
可能,我怀疑您可以通过检索单元素数组来操纵输出。它没有回答您关于
apply的问题,但我们知道一般apply很慢,即使在倒数第二个情况下也是如此。
标签: python pandas numpy dataframe scipy