我的CSV文件如下所示。第一行是列名称,即波长。
3000 3005 3010 3020 3025 3035
0.12 0.11 0.19 0.16 0.18 0.20
0.25 0.34 0.15 0.20 0.25 0.45
0.05 0.08 0.25 0.35 0.66 0.22
像这样,我总共有135列,其中28列缺失。列的增量为5.所以我想比较列名并插入上一列和下一列数据的平均值。例如,缺少列3015
,因此我想将其与列列表进行比较,并将均值(例如(0.19 + 0.16) / 2
)插入新列(3015
)。
现在我只是手动完成:
data["3015"] = None
data["3015"] = (data["3010"] + data["3020"]) / 2.
是否有可能以更有效的方式做到这一点?
答案 0 :(得分:0)
根据您的列是str还是int,第一行可能需要更改,但基本上您可以{d}生成缺失的波长,然后调用reindex
并传递{{1}填写缺失值,这相当于取得之前和之后的测量平均值:
axis=1
因此,如果您的列如下所示:
In [149]:
new_df = df.reindex(columns=np.arange(3000, 3040, 5).astype(str))
new_df
Out[149]:
3000 3005 3010 3015 3020 3025 3030 3035
0 0.12 0.11 0.19 NaN 0.16 0.18 NaN 0.20
1 0.25 0.34 0.15 NaN 0.20 0.25 NaN 0.45
2 0.05 0.08 0.25 NaN 0.35 0.66 NaN 0.22
In [158]:
new_df.interpolate(axis=1)
Out[158]:
3000 3005 3010 3015 3020 3025 3030 3035
0 0.12 0.11 0.19 0.175 0.16 0.18 0.19 0.20
1 0.25 0.34 0.15 0.175 0.20 0.25 0.35 0.45
2 0.05 0.08 0.25 0.300 0.35 0.66 0.44 0.22
然后你需要投射In [146]:
df.columns.tolist()
Out[146]:
['3000', '3005', '3010', '3020', '3025', '3035']
的结果,因为我已经显示如果有内注,那么你不需要施放,所以这样做:
np.arange