Как интегрировать серию с помощью scipy.integrate.trapz () - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь получить кривую площади экспериментального набора данных, который в настоящее время имеет тип: серия. Серия состоит из 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 голосов
/ 03 апреля 2019

Если у вас есть только один столбец, 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])

output:

23.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...