首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在巨蟒熊猫中,我怎样才能重新取样和插值DataFrame呢?

在巨蟒熊猫中,我怎样才能重新取样和插值DataFrame呢?
EN

Stack Overflow用户
提问于 2017-01-05 19:36:56
回答 2查看 6.5K关注 0票数 11

我有一个pd DataFrame,通常在这种格式上:

代码语言:javascript
复制
   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列(索引)值,例如:

代码语言:javascript
复制
indexList = numpy.linspace(0.11, 0.25, 8)

然后,我需要从输入DataFrame中线性地插值列2、3和4的值(重新取样/重新索引总是只有我的第1列),如果有必要的话,可以推断,因为我的列表的min/max值不一定在我现有的第1列(索引)中。然而,关键是插补部分。我对python非常陌生,但我想使用这样一种方法:

  1. DataFrame.reindex(index=indexList) = output_df --这将主要给出第2-4列的NaN。
  2. 用于索引,行在output_df.iterrows()中 函数,该函数从DataFrame计算内插/外推值,并将它们插入正确的行/列

不知何故,我觉得我应该能够使用.interpolate功能,但我不知道如何使用。我不能直截了当地使用它--它太不准确了,因为第2-4列中提到的大多数重新索引后的条目都是NaN的;插值应该在初始DataFrame的两个最近的值内进行。有什么好建议吗?(如果我的格式/内涵不明确,请告诉我.)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-05 20:28:38

假设第1列在索引中,您可以用原始值和创建的列表重新索引数据,然后使用内插来填充nan。

代码语言:javascript
复制
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
票数 20
EN

Stack Overflow用户

发布于 2019-03-04 07:17:06

在我们开始一些咒语之前:

代码语言:javascript
复制
import pandas as pd
import numpy

LENGTH=8

让我们从加载数据开始(我们将更改为csv,因为它更容易):

代码语言:javascript
复制
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之间:

代码语言:javascript
复制
indexList = numpy.linspace(0.11, 0.25, LENGTH)

我们将使用第一列作为索引,并重新编制索引:

代码语言:javascript
复制
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.011300
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41493282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档