如何使用scipy.integrate.trapz()集成系列

时间:2019-04-02 21:52:55

标签: pandas scipy jupyter-notebook

我正在尝试获取当前类型为:系列的实验数据集的曲线下面积。该系列有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

有没有办法直接整合第一个系列? 如果没有,什么是最简单,最简单的积分方法?

1 个答案:

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