在python中使用pandas进行计算

时间:2017-10-31 03:39:26

标签: python pandas

我有一个很大的csv文件,这里有一些数据:

"C1_E1",,,,,
"Time","Force","Disp.","Stress","Strain","Stroke"
"sec","N","mm","MPa","%","mm"
"0","0.1192093","0","0.003017193","0","0"
"0.01","0.09536743","2.083333E-05","0.002413754","1.621271E-05","2.083333E-05"
"0.02","0.09536743","0.00025","0.002413754","0.0001945525","0.00025"
"0.03","0.09536743","0.0013125","0.002413754","0.001021401","0.0013125"
"0.04","0.09536743","0.003604167","0.002413754","0.002804799","0.003604167"
"0.05","0.09536743","0.006875","0.002413754","0.005350194","0.006875"
"0.06","0.09536743","0.01104167","0.002413754","0.008592736","0.01104167"
"0.07","0.09536743","0.01602083","0.002413754","0.01246757","0.01602083"
"0.08","0.09536743","0.02191667","0.002413754","0.01705577","0.02191667"
"0.09","0.09536743","0.028625","0.002413754","0.02227626","0.028625"
"0.1","0.09536743","0.035875","0.002413754","0.02791829","0.035875"
"0.11","3.910065","0.04352083","0.09896392","0.03386835","0.04352083"
"0.12","13.39118","0.05145833","0.3389313","0.0400454","0.05145833"
"0.13","18.46155","0.05989583","0.4672626","0.04661154","0.05989583"
"0.14","23.57165","0.06875","0.5965995","0.05350194","0.06875"

我需要使用Stress和Strain列和pandas中的数据计算出数量E.这将使用最小二乘法来完成。我写了以下代码:

from scipy import *
import pandas as pd

location = r'C:...\C1-E1.csv'
df = pd.read_csv(location, header=1)
title = pd.read_csv(location, header=None)
title = title.loc[0][0]
df = df[1:].astype(float)
i = 1
XY_calc = pd.DataFrame(columns=['X', 'Y', 'XY', 'sum(XY)', 'mean(X)', 'mean(Y)', 'X^2', 'sum(X^2)', 'mean(X)^2'])
XY_calc = XY_calc[0:].astype(float)
while i < len(df.index):
    XY_calc.at[i, 'X'] = df.at[i, 'Strain']
    XY_calc.at[i, 'Y'] = df.at[i, 'Stress']
        XY_calc.at[i, 'XY'] = df.at[i, 'Strain']*df.at[i, 'Stress']
        XY_calc.at[i, 'sum(XY)'] = sum_XY = XY_calc['XY'].sum()
        XY_calc.at[i, 'mean(X)'] = mean_X = XY_calc['X'].mean()
        XY_calc.at[i, 'mean(Y)'] = mean_Y = XY_calc['Y'].mean()
        XY_calc.at[i, 'X^2'] = X_sqrd = XY_calc.at[i, 'X']**2
        XY_calc.at[i, 'sum(X^2)'] = sum_X_sqrd = XY_calc['X^2'].sum()
        XY_calc.at[i, 'mean(X)^2'] = mean_X_sqrd = XY_calc.at[i, 'mean(X)']**2
    E = (sum_XY-(i*mean_X*mean_Y))/(sum_X_sqrd-(i*mean_X_sqrd))
    i += 1

输出结果为:

C:.../Python/E calc.py:49: RuntimeWarning: invalid value encountered in double_scalars
  E = (sum_XY-(i*mean_X*mean_Y))/(sum_X_sqrd-(i*mean_X_sqrd))
          X         Y            XY       sum(XY)   mean(X)   mean(Y)  \
1  0.000000  0.003017  0.000000e+00  0.000000e+00  0.000000  0.003017   
2  0.000016  0.002414  3.913349e-08  3.913349e-08  0.000008  0.002715   
3  0.000195  0.002414  4.696019e-07  5.087354e-07  0.000070  0.002615   
4  0.001021  0.002414  2.465411e-06  2.974146e-06  0.000308  0.002565   
5  0.002805  0.002414  6.770095e-06  9.744241e-06  0.000807  0.002534   

            X^2      sum(X^2)     mean(X)^2  
1  0.000000e+00  0.000000e+00  0.000000e+00  
2  2.628520e-10  2.628520e-10  6.571299e-11  
3  3.785068e-08  3.811353e-08  4.935775e-09  
4  1.043260e-06  1.081374e-06  9.488960e-08  
5  7.866897e-06  8.948271e-06  6.518835e-07  

我有两个问题:

  1. 有更好的方法进行计算吗?我创建了XY_calc数据框来帮助进行计算,但可以采用不同的方式吗?
  2. 我怎么会得到&#34;在double_scalars&#34;中遇到无效值?是因为浮子E的尺寸太小了吗?
  3. 感谢和抱歉这个长期的问题,我还是蟒蛇和熊猫的新手。

0 个答案:

没有答案