我有一个pd DataFrame,通常在这种格式上:
1 2 3 4
0.1100 0.0000E+00 1.0000E+00 5.0000E+00
0.1323 7.7444E-05 8.7935E-01 1.0452E+00
0.1545 4.3548E-04 7.7209E-01 4.5432E-01
0.1768 1.2130E-03 6.7193E-01 2.6896E-01
0.1990 2.5349E-03 5.7904E-01 1.8439E-01
0.2213 4.5260E-03 4.9407E-01 1.3771E-01 我想做的是重新采样列表中的第1列(索引)值,例如:
indexList = numpy.linspace(0.11, 0.25, 8)然后,我需要从输入DataFrame中线性地插值列2、3和4的值(重新取样/重新索引总是只有我的第1列),如果有必要的话,可以推断,因为我的列表的min/max值不一定在我现有的第1列(索引)中。然而,关键是插补部分。我对python非常陌生,但我想使用这样一种方法:
不知何故,我觉得我应该能够使用.interpolate功能,但我不知道如何使用。我不能直截了当地使用它--它太不准确了,因为第2-4列中提到的大多数重新索引后的条目都是NaN的;插值应该在初始DataFrame的两个最近的值内进行。有什么好建议吗?(如果我的格式/内涵不明确,请告诉我.)
发布于 2017-01-05 20:28:38
假设第1列在索引中,您可以用原始值和创建的列表重新索引数据,然后使用内插来填充nan。
df1 = df.reindex(df.index.union(np.linspace(.11,.25,8)))
df1.interpolate('index')
2 3 4
0.1100 0.000000 1.000000 5.000000
0.1300 0.000069 0.891794 1.453094
0.1323 0.000077 0.879350 1.045200
0.1500 0.000363 0.793832 0.574093
0.1545 0.000435 0.772090 0.454320
0.1700 0.000976 0.702472 0.325482
0.1768 0.001213 0.671930 0.268960
0.1900 0.001999 0.616698 0.218675
0.1990 0.002535 0.579040 0.184390
0.2100 0.003517 0.537127 0.161364
0.2213 0.004526 0.494070 0.137710
0.2300 0.004526 0.494070 0.137710
0.2500 0.004526 0.494070 0.137710发布于 2019-03-04 07:17:06
在我们开始一些咒语之前:
import pandas as pd
import numpy
LENGTH=8让我们从加载数据开始(我们将更改为csv,因为它更容易):
x=""" 1 2 3 4
0.1100 0.0000E+00 1.0000E+00 5.0000E+00
0.1323 7.7444E-05 8.7935E-01 1.0452E+00
0.1545 4.3548E-04 7.7209E-01 4.5432E-01
0.1768 1.2130E-03 6.7193E-01 2.6896E-01
0.1990 2.5349E-03 5.7904E-01 1.8439E-01
0.2213 4.5260E-03 4.9407E-01 1.3771E-01
"""
nx = ""
for l in x.split('\n'):
nx += ','.join(l.split()) + '\n'
df= pd.read_csv(pd.compat.StringIO(nx))现在,您希望在相同的数据上插入一个新的数据帧,但是数组的值介于0.11和0.25之间:
indexList = numpy.linspace(0.11, 0.25, LENGTH)我们将使用第一列作为索引,并重新编制索引:
df_interpolated = df.reindex(df.index.union(indexList)).interpolate('index')
df_interpolated.head(LENGTH)
1 2 3 4
0.00 0.110000 0.000000 1.000000 5.000000
0.11 0.112453 0.000009 0.986729 4.564972
0.13 0.112899 0.000010 0.984316 4.485876
0.15 0.113345 0.000012 0.981903 4.406780
0.17 0.113791 0.000013 0.979490 4.327684
0.19 0.114237 0.000015 0.977077 4.248588
0.21 0.114683 0.000016 0.974664 4.169492
0.23 0.115129 0.000018 0.972251 4.090396
0.25 0.115575 0.000019 0.969838 4.011300https://stackoverflow.com/questions/41493282
复制相似问题