熊猫:内插数据框并替换值

时间:2020-01-30 19:31:00

标签: python python-3.x pandas interpolation curve

对于数据框的每一列,我使用pandas函数“ interpolate”进行了插值,并且尝试用插值曲线的值(excel上的趋势曲线)替换数据框的值。

我有以下数据框,命名为数据

        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 :(得分:0)

尝试一下,

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

答案 1 :(得分:0)

实际上它与scipy.interpolate.UnivariateSpline一起使用