在Python中比较两个列名并插入平均值
我的CSV文件如下所示。第一行是波长的列名在Python中比较两个列名并插入平均值,python,mean,Python,Mean,我的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,
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.
有没有更有效的方法来实现这一点?根据列是str还是int,第一行可能需要更改,但基本上您可以使用df来生成缺少的波长,然后调用并传递
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的结果进行强制转换,如我所示,如果存在int,则不需要强制转换,因此可以执行以下操作:
new_df = df.reindex(columns=np.arange(3000, 3040, 5))
请注意,您正在执行
data[str(x)]=(data[str(x-5)]+data[str(x+5)])/2.
,并从那里开始工作。此外,您不需要初始化为None
。如果缺少连续两个,例如3015
和3020
,该怎么办?还是连续八次?您是如何加载csv的?你在用熊猫吗?@EdChum是的,我在用熊猫…好的,你的列是str还是int?如果执行df.columns.tolist()