【问题标题】:Interpolation for a Dataframe without explicit 'NaN' rows in the original Dataframe在原始数据帧中没有显式“NaN”行的数据帧的插值
【发布时间】:2019-03-08 15:11:28
【问题描述】:

我想知道如何在“数据”列的行之间进行插值,并在其中循环遍历它并创建一个带有“0.3”、“0.5”和“0.6”的新行来填补空白?

df = pd.DataFrame([0.1,0.2,0.4,0.7],columns=['Data'])
df

如何使用原始数据帧的代码来生成下面的图像?

提前非常感谢。

【问题讨论】:

  • 这里的目标到底是什么?给定一个数据框(仅包含一列?),创建新行以使后续行中的值最多相隔 0.1?如果这就是你想要的,你也许可以只做df.Data = np.arange(df.Data.min(), df.Data.max(), 0.1)。如果有还有其他列,应该如何处理?您是否将 NaN 放入插值行上的其他列?
  • 是的,NaN 在其他列中很好。
  • 我认为你的第一行代码是答案'np.arange(df.Data.min(),df.Data.max() +0.1,0.1)
  • 我刚刚添加了 0.1 以包含 0.7
  • 这更像是重新创建数据框

标签: python-3.x pandas dataframe


【解决方案1】:

在我看来应该有2个解决方案,还为示例数据添加了更多列:

df = pd.DataFrame({'Data': [0.1,0.2,0.4,0.7],
                   'A':list('abcd'),
                   'B':[4,5,6,9]})
print (df)
   Data  A  B
0   0.1  a  4
1   0.2  b  5
2   0.4  c  6
3   0.7  d  9

通过Data 列创建索引并使用DataFrame.reindex:

arr = np.arange(df.Data.min(),df.Data.max() + 0.1,0.1)

df1 = df.set_index('Data').reindex(arr).reset_index()
print (df1)
   Data    A    B
0   0.1    a  4.0
1   0.2    b  5.0
2   0.3  NaN  NaN
3   0.4    c  6.0
4   0.5  NaN  NaN
5   0.6  NaN  NaN
6   0.7  NaN  NaN

或者使用左连接创建助手 DataFrame 和 DataFrame.merge:

df1 = pd.DataFrame({'Data':arr}).merge(df, how='left')
print (df1)
   Data    A    B
0   0.1    a  4.0
1   0.2    b  5.0
2   0.3  NaN  NaN
3   0.4    c  6.0
4   0.5  NaN  NaN
5   0.6  NaN  NaN
6   0.7  NaN  NaN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多