如何将 pandas 时间戳添加到数据帧 post read_csv
Posted
技术标签:
【中文标题】如何将 pandas 时间戳添加到数据帧 post read_csv【英文标题】:How to add pandas time stamp to a dataframe post read_cvs 【发布时间】:2019-11-19 19:08:43 【问题描述】:读取 cvs 文件后,如何在数据框中添加时间戳?我有一个带有测量值的数据集,但没有时间戳。我知道传感器数据的频率 (200 Hz) 和开始日期/时间。
我试图计算文件中的行数并创建一个时间列。使用 pd.insert 我插入了这个时间戳。我的问题是,在绘制这些数据时,我的 x 轴不显示属性时间戳,而是显示测量次数。我的代码:
#Importing signals
data = pd.read_csv('.../monday.txt')
data.columns = ['l1','l2','l3','l4','l5','l6']
print("Sensor data: ")
print(data.head())
print(data.dtypes)
nbrMeasurments = sum(1 for line in open('.../monday.txt'))
data.insert(0, "Time", pd.timedelta_range('11:24:26',
periods=nbrMeasurments-1, freq="5L"))
print("Revised sensor data: ")
print(data.head())
print(data.dtypes)
在另一个有时间戳的文件中,pd.read_csv('.../mondayV1.csv',index_col='Date', usecols= [0,1,2], parse_dates=True)
中的“index_col='Date'”似乎是确保 x 轴由日期而不是测量编号“x”引用的命令:
SYS (mmHg) DIA (mmHg)
Date
2019-08-07 13:06:30 111 61
2019-08-07 13:07:08 114 64
2019-08-07 13:07:56 112 63
2019-08-07 13:08:42 127 81
2019-08-07 13:09:19 129 83
Omron data types:
SYS (mmHg) int64
DIA (mmHg) int64
在我尝试插入没有时间戳的文件时,“时间”被列为变量:
Time l1 l2 l3 l4 l5
l6
0 11:24:26 0.787261 0.943828 1.100903 0.835889 2.524946
2.252113
1 11:24:26.005000 0.787068 0.943638 1.100871 0.835882 2.531180
2.253063
2 11:24:26.010000 0.786951 0.943496 1.100779 0.835909 2.531573
2.253395
3 11:24:26.015000 0.786879 0.943553 1.100877 0.835877 2.533841
2.254906
4 11:24:26.020000 0.786682 0.943536 1.100651 0.835674 2.539893
2.257780
Time timedelta64[ns]
l1 float64
l2 float64
l3 float64
l4 float64
ecg float64
ppg float64
如何以最有效的方式将时间归因于该文件?
【问题讨论】:
【参考方案1】:像这样尝试data.set_index(keys="Time", inplace=True)
:
import pandas as pd
from io import StringIO
data = pd.read_csv(StringIO("""
Time l1 l2 l3 l4 l5 l6
0 11:24:26 0.787261 0.943828 1.100903 0.835889 2.524946 2.252113
1 11:24:26.005000 0.787068 0.943638 1.100871 0.835882 2.531180 2.253063
2 11:24:26.010000 0.786951 0.943496 1.100779 0.835909 2.531573 2.253395
3 11:24:26.015000 0.786879 0.943553 1.100877 0.835877 2.533841 2.254906
4 11:24:26.020000 0.786682 0.943536 1.100651 0.835674 2.539893 2.257780"""), sep="\s+")
data.set_index(keys="Time", inplace=True)
print(data)
输出:
l1 l2 l3 l4 l5 l6
Time
11:24:26 0.787261 0.943828 1.100903 0.835889 2.524946 2.252113
11:24:26.005000 0.787068 0.943638 1.100871 0.835882 2.531180 2.253063
11:24:26.010000 0.786951 0.943496 1.100779 0.835909 2.531573 2.253395
11:24:26.015000 0.786879 0.943553 1.100877 0.835877 2.533841 2.254906
11:24:26.020000 0.786682 0.943536 1.100651 0.835674 2.539893 2.257780
【讨论】:
【参考方案2】:将值分配给索引而不是data.insert
:
data = pd.read_csv('.../monday.txt')
data.columns = ['l1','l2','l3','l4','l5','l6']
print("Sensor data: ")
print(data.head())
print(data.dtypes)
nbrMeasurments = sum(1 for line in open('.../monday.txt'))
data.index = pd.timedelta_range('11:24:26', periods=nbrMeasurments-1, freq="5L")
#another solution
#data = data.set_index(pd.timedelta_range('11:24:26', periods=nbrMeasurments-1, freq="5L"))
print("Revised sensor data: ")
print(data.head())
print(data.index)
【讨论】:
以上是关于如何将 pandas 时间戳添加到数据帧 post read_csv的主要内容,如果未能解决你的问题,请参考以下文章