对于数据框的每一列,我使用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)
我认为就地可以替换值,但似乎不起作用。有人知道该怎么做吗?
谢谢,祝你有美好的一天:)
答案 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一起使用