这是我的代码:
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)
Output:
(20, 24)
(1, 24)
(1, 24)
Sigma 和 Mu 是 numpy 数组或矩阵。
我想执行这个操作:
all_data = (all_data - mu)/sigma
这里,all_data
的第一列(所有行)首先减去 mu
的第一列,然后除以 sigma
的第一列>
all_data
的第二列(所有行)首先减去 mu
的第二列,然后除以 sigma
的第二列>
像那样
最佳答案
如果您使用数据框的底层 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
,第二列有第二个值,等等......
关于python - 如何使用 Pandas 对所有 CSV 文件列和行执行数学运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53378420/