这是我的代码:
all_data = pd.read_csv('data2.csv')
mu = np.array([all_data.mean(0)])
sigma = np.array([np.std(all_data,axis=0)])
print(all_data.shape)
print(mu.shape)
print(sigma.shape)
输出:
(20,24)
(1,24)
(1,24)
Sigma和Mu是numpy数组或矩阵。
我要执行此操作:
all_data =(all_data-mu)/ sigma
这里,all_data
的第一列(所有行)首先被mu
的第一列减去,然后除以sigma
的第一列
all_data
的第二列(所有行)首先被mu
的第二列减去,然后除以sigma
的第二列
喜欢
答案 0 :(得分:1)
如果您使用数据帧的基础numpy数组,则广播将为您完成工作:
(all_data.values - mu)/sigma
然后将其放回与all_data
相同的列/索引的数据框中:
pd.DataFrame((all_data.values - mu)/sigma, columns=all_data.columns, index=all_data.index)
示例:
在此小型数据框上:
all_data = pd.DataFrame(np.random.randint(0,9,(5,5)))
>>> all_data
0 1 2 3 4
0 5 7 1 8 6
1 5 8 0 3 0
2 8 2 0 1 6
3 5 8 7 7 0
4 4 6 0 2 5
使用:
mu = np.array([all_data.mean(0)])
sigma = np.array([np.std(all_data,axis=0)])
>>> mu
array([[5.6, 2. , 4. , 4.4, 7.6]])
>>> sigma
array([[1.62480768, 1.26491106, 3.40587727, 2.41660919, 0.48989795]])
您可以获得:
>>> pd.DataFrame((all_data.values - mu)/sigma, columns=all_data.columns, index=all_data.index)
0 1 2 3 4
0 -0.369274 3.952847 -0.88083 1.489691 -3.265986
1 -0.369274 4.743416 -1.17444 -0.579324 -15.513435
2 1.477098 0.000000 -1.17444 -1.406930 -3.265986
3 -0.369274 4.743416 0.88083 1.075888 -15.513435
4 -0.984732 3.162278 -1.17444 -0.993127 -5.307228
随意进行数学运算,但它满足您的要求:该操作应用于数据框的第一列,其第一值为sigma
和mu
,第二列为第二值,等等...
答案 1 :(得分:0)
numpy.matlib.repmat
怎么样?
df = pd.DataFrame(numpy.random.rand(20, 24))
mu = np.array([all_data.mean(0)])
sigma = np.array([np.std(all_data,axis=0)])
MU = pd.DataFrame(numpy.matlib.repmat(mu,20, 1))
SIGMA = pd.DataFrame(numpy.matlib.repmat(sigma,20, 1))
all_data = (all_data - MU)/SIGMA