我得到了以下简单的代码来计算数组的正态性:
import pandas as pd
df = pd.read_excel("directory\file.xlsx")
import numpy as np
x=df.iloc[:,1:].values.flatten()
import scipy.stats as stats
from scipy.stats import normaltest
stats.normaltest(x,axis=None)
这很好地为我提供了p值和统计信息。 我现在唯一想要的是:
在文件中添加2列,并带有此 p 值和统计;如果我有多行,请对所有行执行此操作(计算每行的p值和统计信息,并在其中添加2列,其中包含这些值。
有人可以帮忙吗?
答案 0 :(得分:1)
如果您要按行计算normaltest
,则不应flatten
中的数据x
,而应使用axis=1
,例如
df = pd.DataFrame(np.random.random(105).reshape(5,21)) # to generate data
# calculate normaltest row-wise without the first column like you
df['stat'] ,df['p'] = stats.normaltest(df.iloc[:,1:],axis=1)
然后df
包含两列“ stat”和“ p”,其中包含您要寻找IIUC的值。
注意:为了能够执行normaltest
,您至少需要8个值(根据我的经验),因此在df.iloc[:,1:]
中至少需要8列,否则会引发错误。甚至最好每行有20个以上的值。