我一直在努力在这项任务上取得任何进展但基本上我已经设置了一个脚本,到目前为止读取包含多列数据的文本文件,第一列读取时间如下:
Time_(s) Mass_Flow_(kg/s) T_in_pipe(C) T_in_water(C) T_out_pipe(C) T_out_water(C)
0 1.2450 16.9029 16.8256 16.6234 16.6204
2.8700 1.2450 16.8873 16.8094 16.6237 19.6507
5.6600 1.2450 16.8889 16.8229 19.1406 29.1320
8.7800 1.2450 16.8875 16.8236 24.1325 34.9077
11.6200 1.2450 16.8794 16.8040 28.3927 38.5443
16.0600 1.2450 16.8615 16.7942 33.7205 42.4149
18.8900 1.2450 16.8512 16.7938 36.2797 44.1221
23.0200 1.2450 16.8319 16.7903 39.2102 46.1857
使用pandas工具pd.read_csv,我有一个数据框,其中包含每个包含标题的列。我现在想要重新采样这些数据,以便输出数据帧包含所有数据列,但是以用户指定的固定时间间隔。例如,如果选择时间步长为10秒,则使用线性插值的输出将如下所示:
Time_(s) T_out_pipe(C) T_out_water(C) T_in_pipe(C) T_in_water(C) Mass_Flow(kg/s)
0 16.9028797149658 16.8256435394287 16.6234245300293 16.6203994750977 1.24500000476837
10 16.8840274810791 16.8151550292969 25.9625988006592 36.4699172973633 1.24500000476837
20 16.8460464477539 16.7928314208984 37.0673408508301 44.6767387390137 1.24500000476837
30 16.8223628997803 16.7767677307129 42.5221672058106 48.3903617858887 1.24500000476837
我已经看到使用pandas中的重新采样功能完成了类似的事情,但我见过的所有示例都要求时间数据采用年/月/日/小时/分钟/秒的格式。我确信我可以将第一列转换为时间序列,但我觉得在我的情况下必须有一个更简单的方法。如果有其他人使用类似的转换过程,我会很高兴获得一些见解。
非常感谢,
基思
答案 0 :(得分:2)
set_index
'Time_(s)'
,reindex
+ interpolate
d = df.set_index('Time_(s)')
t = d.index
r = pd.Index([0, 10, 20, 30], name=t.name)
df.set_index('Time_(s)') \
.reindex(t.union(r)).interpolate('index').ix[r].reset_index()
插值验证
y0, y1 = 16.8875, 16.8794
x0, x1 = 8.78, 11.62
m = (y1 - y0) / (x1 - x0)
f = lambda x: m * (x - x0) + y0
f(10)
16.88402042253521
参考代码
正是我跑的
from StringIO import StringIO
import pandas as pd
txt = """Time_(s) Mass_Flow_(kg/s) T_in_pipe(C) T_in_water(C) T_out_pipe(C) T_out_water(C)
0 1.2450 16.9029 16.8256 16.6234 16.6204
2.8700 1.2450 16.8873 16.8094 16.6237 19.6507
5.6600 1.2450 16.8889 16.8229 19.1406 29.1320
8.7800 1.2450 16.8875 16.8236 24.1325 34.9077
11.6200 1.2450 16.8794 16.8040 28.3927 38.5443
16.0600 1.2450 16.8615 16.7942 33.7205 42.4149
18.8900 1.2450 16.8512 16.7938 36.2797 44.1221
23.0200 1.2450 16.8319 16.7903 39.2102 46.1857"""
df = pd.read_csv(StringIO(txt), delim_whitespace=True)
print(df)
d = df.set_index('Time_(s)')
t = d.index
r = pd.Index([0, 10, 20, 30], name=t.name)
df.set_index('Time_(s)') \
.reindex(t.union(r)).interpolate('index').ix[r].reset_index()