首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将CSV文件中的相对时间转换为绝对时间

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

Stack Overflow用户
提问于 2017-07-04 21:15:26
回答 1查看 154关注 0票数 0
代码语言:javascript
运行
复制
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文件读取数据,csv文件是从我的仪器导出数据。在excel文件中,我手动将相对时间转换为分钟时间,并得到了正确的曲线图。但我想在读取csv文件中的相对时间列时,直接在matplotlib中转换相对时间。我试过不同的例子,但就是不能理解。我是python的新手,所以任何人都可以在我的代码中帮助编辑。我的实际数据格式如下。(此代码用于绘制绝对时间,即时间,在matplotlib中绘制之前,我已经将其转换为excel )在此处输入图像描述。

代码语言:javascript
运行
复制
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

绘图

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-04 23:24:20

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

pandas.to_timedelta

代码语言:javascript
运行
复制
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

半手动

代码语言:javascript
运行
复制
time_in_minutes = [sum(int(x) * 60**i for i, x in enumerate(reversed(t.split(':')), -1)) for t in data['Time']]

解释

这与以下内容相同:

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44907085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档