Pandas: интерполировать фрейм данных и заменять значения - PullRequest
0 голосов
/ 30 января 2020

Для каждого столбца кадра данных я выполнил интерполяцию с использованием функции * интерполировать pandas, и я пытаюсь заменить значения кадра данных значениями интерполированной кривой (кривая тренда в Excel).

У меня есть следующий фрейм данных с именем data

        0      1
0   0.000  0.002
1   0.001  0.002
2   0.001  0.003
3   0.003  0.004
4   0.003  0.005
5   0.003  0.005
6   0.004  0.006
7   0.005  0.006
8   0.006  0.007
9   0.006  0.007
10  0.007  0.008
11  0.007  0.009
12  0.008  0.010
13  0.008  0.010
14  0.010  0.012

Затем я сделал следующий код:

for i in range(len(data.columns)):
    data[i].interpolate(method="polynomial",order=2,inplace=True)

Я думал, что на месте заменит значения, но это не так Кажется, это работает. Кто-нибудь знает, как это сделать?

Спасибо и хорошего дня:)

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Это на самом деле работает с scipy.interpolate.UnivariateSpline

0 голосов
/ 30 января 2020

Попробуйте,

import pandas as pd
import numpy as np

Я создал мини-текстовый файл с некоторыми сумасшедшими значениями, чтобы вы могли увидеть, как работает интерполяция.

Файл выглядит следующим образом,

0,1
0.0,.002
0.001,.3
NaN,NaN
4.003,NaN
.004,19
.005,234
NaN,444
1,777 

Вот как можно импортировать и обрабатывать ваши данные,

df=pd.read_csv('datafile.txt, header=0)

for column in df:
  df[column].interpolate(method="polynomial",order=2,inplace=True)

print(df.head())

, теперь фрейм данных выглядит следующим образом:

       0           1
0  0.000000    0.002000
1  0.001000    0.300000
2  2.943616  -30.768123
3  4.003000  -70.313176
4  0.004000   19.000000
5  0.005000  234.000000
6  0.616931  444.000000
7  1.000000  777.000000

Кроме того, если вы хотите выполнить интерполяцию между точки в вашем кадре данных, это что-то другое.

Нечто подобное было бы,

df1 = df.reindex(df.index.union(np.linspace(.11,.25,8)))
df1.interpolate('index')

результаты этого выглядят,

    0        1
0.00  0.00000  0.00200
0.11  0.00011  0.03478
0.13  0.00013  0.04074
0.15  0.00015  0.04670
0.17  0.00017  0.05266
0.19  0.00019  0.05862
0.21  0.00021  0.06458
0.23  0.00023  0.07054
0.25  0.00025  0.07650
1.00  0.00100  0.30000
...