如何使用熊猫对所有CSV文件列和行执行数学运算

时间:2018-11-19 15:59:38

标签: python pandas numpy

这是我的代码:

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的第二列

喜欢

2 个答案:

答案 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

随意进行数学运算,但它满足您的要求:该操作应用于数据框的第一列,其第一值为sigmamu,第二列为第二值,等等...

答案 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