我正在尝试获取当前类型为:系列的实验数据集的曲线下面积。该系列有2700个条目,但我只想集成前300个条目。预期结果为-0.2923,但使用scipy.integrate.trapz()的实际结果为0。
import scipy
import pandas as pd
#display only first 10 entries to give a feel for the data:
dataseries.head(10)
649.6 -0.000990
649.9 -0.000849
650.1 -0.000855
650.3 -0.001658
650.6 -0.001648
650.8 -0.001244
651.1 -0.001144
651.3 -0.001004
651.5 -0.000684
651.8 -0.001233
print(scipy.integrate.trapz(dataseries[:300], axis=0))
0.0
我(模糊地)将系列转换为数组,并将数组转换为列表,然后积分按预期在列表上工作:
df=pd.DataFrame({'x':dataseries.index, 'y':dataseries.values})
dataArray=df.values
datalist=[[0 for u in range(0, 300)] for y in range(0, 2)]
for c in range(0, 300):
datalist[0][c]=dataArray[c][0]
if math.isnan(dataArray[c][1]):
datalist[1][c]=dataArray[c+1][1]
else:
datalist[1][c]=dataArray[c][1]
print(scipy.integrate.trapz(datalist[1], datalist[0]))
-0.2923
有没有办法直接整合第一个系列? 如果没有,什么是最简单,最简单的积分方法?
答案 0 :(得分:0)
如果只有一列y
,则可以简单地使用df ['y'] [:300]获取前300个条目,然后直接传递给trapz
函数。以下是有效的最小代码,它集成了数据帧的前5个条目。
from scipy.integrate import trapz
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([1,3,7,8,10,15]), columns=['y'])
trapz(df['y'][:5])
输出:
23.5