【发布时间】:2020-06-26 13:06:39
【问题描述】:
我的目标是将 pandas 数据帧、下限值和上限值传递给函数,使用最近邻对边界内的所有 NaN 进行插值,返回插值后的 df 和进行的插值次数。有时一行中有几个 NaN,因此嵌套循环查找下一个非 NaN 值进行插值。
def gap_clean(df, lb, ub):
data = {'a':df.index, 'b':df.values}
df2 = pd.DataFrame(data)
lb_index = df[df['a'] == lb].index.values[0]
ub_index = df[df['a'] == ub].index.values[0]
interpolations = 0
for i in range(lb_index, ub_index+1):
if np.isnan(df2.loc[i, 'b']):
for j in range(1, 20):
if ~np.isnan(df2.loc[i+j, 'b']):
interpolations += 1
df2.loc[i, 'b'] = (df2.loc[i - 1, 'b'] + df2.loc[i + j, 'b']) / 2
break
df2 = df2.set_index(['a'])
return df2, interpolations;
返回的 df 的预期行为是我可以调用并获取
In []: df.values
Out[]: [1.23,
2.44,
3.55,
...]
相反,我得到:
In []: df.values
Out[]: array([[1.23],
[2.44],
[3.55],
...])
如果我打电话,我可以解决这个问题并获得预期的结果:
reduce(operator.add, df.values.tolist())
将其压平,但每次都这样做很痛苦。如何修改函数以提供预期的行为?
【问题讨论】:
-
你可以试试
df['col'].values -
这是最简单的解决方案,谢谢。