在 Pandas DataFrame 中插入 NaN 单元非常容易:
In [98]: df
Out[98]:
neg neu pos avg
250 0.508475 0.527027 0.641292 0.558931
500 NaN NaN NaN NaN
1000 0.650000 0.571429 0.653983 0.625137
2000 NaN NaN NaN NaN
3000 0.619718 0.663158 0.665468 0.649448
4000 NaN NaN NaN NaN
6000 NaN NaN NaN NaN
8000 NaN NaN NaN NaN
10000 NaN NaN NaN NaN
20000 NaN NaN NaN NaN
30000 NaN NaN NaN NaN
50000 NaN NaN NaN NaN
[12 rows x 4 columns]
In [99]: df.interpolate(method='nearest', axis=0)
Out[99]:
neg neu pos avg
250 0.508475 0.527027 0.641292 0.558931
500 0.508475 0.527027 0.641292 0.558931
1000 0.650000 0.571429 0.653983 0.625137
2000 0.650000 0.571429 0.653983 0.625137
3000 0.619718 0.663158 0.665468 0.649448
4000 NaN NaN NaN NaN
6000 NaN NaN NaN NaN
8000 NaN NaN NaN NaN
10000 NaN NaN NaN NaN
20000 NaN NaN NaN NaN
30000 NaN NaN NaN NaN
50000 NaN NaN NaN NaN
[12 rows x 4 columns]
我还希望它使用给定的方法推断插值范围之外的 NaN 值。我怎样才能最好地做到这一点?
原文由 Jimmy C 发布,翻译遵循 CC BY-SA 4.0 许可协议
推断熊猫
DataFrame
sDataFrame
s 可能被推断出来,但是,在 pandas 中没有简单的方法调用并且需要另一个库(例如 scipy.optimize )。外推
一般来说,外推需要对被外推 的数据做出某些假设。一种方法是通过对数据进行一些通用参数化方程的 曲线拟合,以找到最能描述现有数据的参数值,然后将其用于计算超出该数据范围的值。这种方法的困难和局限性问题是,选择参数化方程时必须做出一些关于 趋势 的假设。这可以通过使用不同的方程式进行反复试验来得出所需的结果,或者有时可以从数据源中推断出来。问题中提供的数据确实不够大,无法获得拟合良好的曲线;但是,这足以说明。
以下是使用三阶多项式外推
DataFrame
的示例此通用函数 (
func()
) 曲线拟合到每一列以获得唯一的列特定参数(即 a 、 b 、 c 、 d )。然后,这些参数化方程用于推断所有索引的每列中的数据NaN
s。外推结果
绘制
avg
列如果没有更大的数据集或不知道数据的来源,这个结果可能是完全错误的,但应该举例说明推断
DataFrame
的过程。可能需要使用func()
中 假设的等式来获得正确的外推。此外,也没有尝试使代码高效。更新:
如果您的索引是非数字的,例如
DatetimeIndex
, 请参阅此答案 以了解如何推断它们。