问题描述
我有以下带有 2 列的 Pandas 数据框 df
,如下所示:
0 0
1. 22
2. 34
3. 21
4. 21
5. 92
如果我们将第一列绘制为 x 轴,将第二列绘制为 y 轴,我想对这条曲线下的面积进行积分。我已尝试使用 scipy
(from scipy import integrate
) 中的集成模块执行此操作,并按照我在在线示例中看到的方式应用:
print(df.integrate)
Dataframe 对象没有集成属性
我该怎么做?
谢谢
解决方法
因为integrate是scipy方法而不是pandas方法,所以需要调用如下:
from scipy.integrate import trapz,simps
print(trapz(*args))
https://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html
,在给定固定数据样本的情况下,您需要数值积分。 Scipy 包列出了一些方法来做到这一点:https://docs.scipy.org/doc/scipy/reference/integrate.html#integrating-functions-given-fixed-samples
对于您的数据,梯形可能是最直接的。您向函数提供 y
和 x
值。您没有发布数据框的列名,所以我对 x 使用 0-index,对 y 值使用 1-index
from scipy.integrate import trapz
trapz(df.iloc[:,1],df.iloc[:,0])
,
试试这个
import pandas as pd
import numpy as np
def integrate(x,y):
area = np.trapz(y=y,x=x)
return area
df = pd.DataFrame({'x':[0,1,2,3,4,5],'y':[0,5,6,7]})
x = df.x.values
y = df.y.values
print(integrate(x,y))