将 CSV 文件中的相对时间转换为绝对时间

Converting relative time from CSV file into absolute time

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import Rbf, InterpolatedUnivariateSpline
data = np.genfromtxt('FTIR Data.csv',  skip_header=1, delimiter=',', usecols=(1,2,3), names=['Time','Peakat2188cm1', 'water']  ) 

x=data['Time']
y1=data['Peakat2188cm1']
y2=data['water']

fig=plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

ius=InterpolatedUnivariateSpline
xs = np.linspace(x.min(), x.max(), 100)
s1=ius(x,y1)
s2=ius(x,y2)
ys1 = s1(xs)
ys2 = s2(xs)

ax2.plot(xs,ys1) 
ax2.plot(xs,ys2)
ax1.set_ylabel('Peak at 2188 cm-1')
ax2.set_ylabel('water')
ax1.set_xlabel('RT (mins)')
plt.title('RT Vs Conc')

这是我从 csv 文件读取数据的代码,该文件是我仪器的导出数据。在 excel 文件中,我手动将相对时间转换为以分钟为单位的时间,并得到了正确的情节。但是我想在读取csv文件中的相对时间列时直接在matplotlib中转换相对时间。我尝试过不同的例子,但无法通过。我是 python 的新手,所以任何人都可以帮助编辑我的代码。我的实际数据采用以下格式。 (这段代码用于绘制绝对时间,即时间,我在 matplotlib 中绘制之前已经在 excel 中进行了转换)[在此处输入图像描述][1]

Relative Time,Peak at 2188 cm-1,water
00:00:51,0.572157,0.179023
00:02:51,0.520037,0.171217
00:04:51,0.551843,0.221285
00:06:50,0.566279,0.209182
00:09:26,0.022696,0.0161351
00:10:51,-0.00344509,0.0141303
00:12:51,0.555898,0.21082
00:14:51,0.519753,0.179563
00:16:51,0.503512,0.150133
00:18:51,0.498554,0.154512
00:20:51,0.00128343,-0.0129148
00:22:51,0.349077,0.0414234
00:24:50,0.360565,0.0522027
00:26:51,0.403705,0.0667703

情节

此刻,Time列仍然是一个字符串。您必须以某种方式将其转换为分钟

pandas.to_timedelta

import pandas as pd

column_names = ['Time','Peakat2188cm1', 'water']
df_orig = pd.read_csv(filename, sep=',')
df_orig.columns = column_names

time_in_minutes = pd.to_timedelta(df_orig['Time']).dt.total_seconds() / 60

半手动

time_in_minutes = [sum(int(x) * 60**i for i, x in enumerate(reversed(t.split(':')), -1)) for t in data['Time']]

说明

这等同于:

time_in_minutes = []

for t in data['Time']:
    minutes = 0
    # t = '00:00:51'
    h_m_s = t.split(':')
    # h_m_s = ['00', '00', '51']
    s_m_h = list(enumerate(reversed(h_m_s), -1))
    # s_m_h = [(-1, '51'), (0, '00'), (1, '00')]
    for i, x in s_m_h:
        # i = -1
        # x = '51'
        minutes += int(x) * 60 ** i
        # minutes = 0.85
    time_in_minutes.append(minutes)