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

时间:2017-07-04 13:15:26

标签: python matplotlib scipy spyder

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

剧情

1 个答案:

答案 0 :(得分:0)

此时,chaine = 'qwertyuiop' ''.join([chaine[-(x + 1)] for x in range(len(chaine))]) 'poiuytrewq' gg = list(chaine) ''.join([gg.pop() for _ in range(len(gg))]) 'poiuytrewq' 列仍然是一个字符串。您必须以某种方式将此转换为分钟

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']]