Как добавить временную метку панд к записи в dataframe read_cvs - PullRequest
2 голосов
/ 10 июля 2019

Как мне присвоить метку времени в моем фрейме данных после чтения файла cvs?У меня есть набор данных с измерениями, но нет отметки времени.Я знаю частоту данных датчика (200 Гц) и дату / время начала.

Я попытался посчитать количество строк в моем файле и создать столбец времени.Используя 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)

В другом файле, где есть отметки времени, похоже, что "index_col = 'Date'" в pd.read_csv('.../mondayV1.csv',index_col='Date', usecols= [0,1,2], parse_dates=True) - это команда, которая гарантирует, что на ось 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

Какя могу приписать время этому файлу наиболее эффективным способом?

Ответы [ 2 ]

1 голос
/ 10 июля 2019

попробуй 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
0 голосов
/ 10 июля 2019

Вместо этого присваивайте значения индексу 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...