In [5]:
# Import Modules and Identify Low Signals
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from pandas import Series, DataFrame, concat

#Define any string with 'C' as NaN. 'C' is an indicator for the Masimo as a low signal reading
def readD(val):
    if 'C' in val:
        return np.nan
    return val

''' -------------------------- '''

BabyNumber = raw_input("Baby's ROP Number? ")

def BabyName():
    if len(BabyNumber) == 3:
        return
    else:
        raise NameError("The syntax is incorrect. It needs to have three digits.")

BabyName()

dfNIRSpre0 = pd.read_csv('/Users/John/Dropbox/LLU/ROP/NIRS/Clean/ROP' + BabyNumber + 'NIRS.csv',
                         parse_dates={'timestamp': ['Date',' Time']},
                         index_col='timestamp',
                         usecols=['Date', ' Time', ' Ch2 %StO2'],
                         na_values=['0'])

dfPOpre0 = pd.read_csv('/Users/John/Dropbox/LLU/ROP/Pulse Ox/ROP' + BabyNumber + 'PO.csv',
                       parse_dates={'timestamp': ['Date','Time']},
                       index_col='timestamp',
                       usecols=['Date', 'Time', 'SpO2', 'PR'],
                       na_values=['0'])

dfPIpre0 = pd.read_csv('/Users/John/Dropbox/LLU/ROP/Pulse Ox/ROP' + BabyNumber + 'PO.csv',
                       parse_dates={'timestamp': ['Date','Time']},
                       index_col='timestamp',
                       usecols=['Date', 'Time', 'PI', 'Exceptions'],
                       na_values=['0'],
                       converters={'Exceptions':  readD}
                       ) #make a PI df as well to clean it better

dfNIRSpre = dfNIRSpre0.rename(columns={' Ch2 %StO2': 'StO2'}) #rename NIRS column

#Clean the PI dataframe to get rid of rows that have NaN
dfPIpre = dfPIpre0[dfPIpre0.loc[:, ['PI', 'Exceptions']].apply(pd.notnull).all(1)]

dfPOpre = dfPIpre.combine_first(dfPOpre0)
#combine PI dataframe with the rest of the Pulse Ox dataframe after cleaning


Baby's ROP Number? 007

In [7]:
dfNIRSpre[3216:3200]


Out[7]:
StO2
timestamp

In [10]:
TCcorrect = timedelta(seconds=1)
ncorr = dfPOpre.index-TCcorrect
dfPOpre[:5]


Out[10]:
Exceptions PI PR SpO2
timestamp
2015-06-30 18:57:17 NaN NaN NaN NaN
2015-06-30 18:57:19 NaN NaN NaN NaN
2015-06-30 18:57:21 NaN NaN NaN NaN
2015-06-30 18:57:23 NaN NaN NaN NaN
2015-06-30 18:57:25 NaN NaN NaN NaN

In [11]:
dfPOpre.set_index(ncorr)


Out[11]:
Exceptions PI PR SpO2
timestamp
2015-06-30 18:57:16 NaN NaN NaN NaN
2015-06-30 18:57:18 NaN NaN NaN NaN
2015-06-30 18:57:20 NaN NaN NaN NaN
2015-06-30 18:57:22 NaN NaN NaN NaN
2015-06-30 18:57:24 NaN NaN NaN NaN
2015-06-30 18:57:26 NaN NaN NaN NaN
2015-06-30 18:57:28 NaN NaN NaN NaN
2015-06-30 18:57:30 NaN NaN NaN NaN
2015-06-30 18:57:32 NaN NaN NaN NaN
2015-06-30 18:57:34 NaN NaN NaN NaN
2015-06-30 18:57:36 NaN NaN NaN NaN
2015-06-30 18:57:38 NaN NaN NaN NaN
2015-06-30 18:57:40 NaN NaN NaN NaN
2015-06-30 18:57:42 NaN NaN NaN NaN
2015-06-30 18:57:44 NaN NaN NaN NaN
2015-06-30 18:57:46 NaN NaN NaN NaN
2015-06-30 18:57:48 NaN NaN NaN NaN
2015-06-30 18:57:50 NaN NaN NaN NaN
2015-06-30 18:57:52 NaN NaN NaN NaN
2015-06-30 18:57:54 NaN NaN NaN NaN
2015-06-30 18:57:56 NaN NaN NaN NaN
2015-06-30 18:57:58 NaN NaN NaN NaN
2015-06-30 18:58:00 NaN NaN NaN NaN
2015-06-30 18:58:02 NaN NaN NaN NaN
2015-06-30 18:58:04 NaN NaN NaN NaN
2015-06-30 18:58:06 NaN NaN NaN NaN
2015-06-30 18:58:08 NaN NaN NaN NaN
2015-06-30 18:58:10 NaN NaN NaN NaN
2015-06-30 18:58:12 NaN NaN NaN NaN
2015-06-30 18:58:14 NaN NaN NaN NaN
... ... ... ... ...
2015-07-01 13:57:56 NaN NaN NaN NaN
2015-07-01 13:57:58 NaN NaN NaN NaN
2015-07-01 13:58:00 NaN NaN NaN NaN
2015-07-01 13:58:02 NaN NaN NaN NaN
2015-07-01 13:58:04 NaN NaN NaN NaN
2015-07-01 13:58:06 NaN NaN NaN NaN
2015-07-01 13:58:08 NaN NaN NaN NaN
2015-07-01 13:58:10 NaN NaN NaN NaN
2015-07-01 13:58:12 NaN NaN NaN NaN
2015-07-01 13:58:14 NaN NaN NaN NaN
2015-07-01 13:58:16 NaN NaN NaN NaN
2015-07-01 13:58:18 NaN NaN NaN NaN
2015-07-01 13:58:20 NaN NaN NaN NaN
2015-07-01 13:58:22 NaN NaN NaN NaN
2015-07-01 13:58:24 NaN NaN NaN NaN
2015-07-01 13:58:26 NaN NaN NaN NaN
2015-07-01 13:58:28 NaN NaN NaN NaN
2015-07-01 13:58:30 NaN NaN NaN NaN
2015-07-01 13:58:32 NaN NaN NaN NaN
2015-07-01 13:58:34 NaN NaN NaN NaN
2015-07-01 13:58:36 NaN NaN NaN NaN
2015-07-01 13:58:38 NaN NaN NaN NaN
2015-07-01 13:58:40 NaN NaN NaN NaN
2015-07-01 13:58:42 NaN NaN NaN NaN
2015-07-01 13:58:44 NaN NaN NaN NaN
2015-07-01 13:58:46 NaN NaN NaN NaN
2015-07-01 13:58:48 NaN NaN NaN NaN
2015-07-01 13:58:50 NaN NaN NaN NaN
2015-07-01 13:58:52 NaN NaN NaN NaN
2015-07-01 13:58:54 NaN NaN NaN NaN

34250 rows × 4 columns


In [12]:
dfPOpre[3216:3200]


Out[12]:
Exceptions PI PR SpO2
timestamp

In [61]:
TCcorrect = timedelta(seconds=1)
if dfNIRSpre.index[:1].second % 2 == 0:
    if dfPOpre.index[:1].second % 2 == 0:
        print 'Both NIRS and PO indices are even'
    elif dfPOpre.index[:1].second % 2 != 0:
        print 'NIRS even, PO odd. PO index corrected'
        dfPOpre = dfPOpre.set_index([dfPOpre.index-TCcorrect])
    else:
        raise NameError('Indices are messed up')
elif dfNIRSpre.index[:1].second % 2 != 0:
    if dfPOpre.index[:1].second % 2 == 0:
        print 'NIRS odd, PO even. NIRS index corrected'
        dfNIRSpre = dfNIRSpre.set_index([dfNIRSpre.index+TCcorrect])
    elif dfPOpre.index[:1].second % 2 != 0:
        print 'Both NIRS and PO indices are odd. Both corrected'
        dfNIRSpre = dfNIRSpre.set_index([dfNIRSpre.index+TCcorrect])
        dfPOpre = dfPOpre.set_index([dfPOpre.index-TCcorrect])
else:
    raise NameError('Indices are messed up')


NIRS even, PO odd. PO index corrected

In [62]:
TCnirs = timedelta(minutes=2, seconds=10)
TCpo = timedelta(minutes=1, seconds=32)
# NIRS is slower than correct time, need to add TCnirs to catch it up
# PO is faster than correct time, need to subtract TCpo to slow it down

dfNIRS = dfNIRSpre.set_index([dfNIRSpre.index+TCnirs]) #NIRS Time Correction
dfPO = dfPOpre.set_index([dfPOpre.index-TCpo]) #PO Time Correction

df = dfNIRS.combine_first(dfPO) #Combine two DataFrame objects and default to non-null values in frame calling the method.

df_first = df.first_valid_index #get the first number from index
#Y = pd.to_datetime(df_first) #convert index to datetime

In [67]:
dfPOpre


Out[67]:
Exceptions PI PR SpO2
timestamp
2015-06-30 18:57:16 NaN NaN NaN NaN
2015-06-30 18:57:18 NaN NaN NaN NaN
2015-06-30 18:57:20 NaN NaN NaN NaN
2015-06-30 18:57:22 NaN NaN NaN NaN
2015-06-30 18:57:24 NaN NaN NaN NaN
2015-06-30 18:57:26 NaN NaN NaN NaN
2015-06-30 18:57:28 NaN NaN NaN NaN
2015-06-30 18:57:30 NaN NaN NaN NaN
2015-06-30 18:57:32 NaN NaN NaN NaN
2015-06-30 18:57:34 NaN NaN NaN NaN
2015-06-30 18:57:36 NaN NaN NaN NaN
2015-06-30 18:57:38 NaN NaN NaN NaN
2015-06-30 18:57:40 NaN NaN NaN NaN
2015-06-30 18:57:42 NaN NaN NaN NaN
2015-06-30 18:57:44 NaN NaN NaN NaN
2015-06-30 18:57:46 NaN NaN NaN NaN
2015-06-30 18:57:48 NaN NaN NaN NaN
2015-06-30 18:57:50 NaN NaN NaN NaN
2015-06-30 18:57:52 NaN NaN NaN NaN
2015-06-30 18:57:54 NaN NaN NaN NaN
2015-06-30 18:57:56 NaN NaN NaN NaN
2015-06-30 18:57:58 NaN NaN NaN NaN
2015-06-30 18:58:00 NaN NaN NaN NaN
2015-06-30 18:58:02 NaN NaN NaN NaN
2015-06-30 18:58:04 NaN NaN NaN NaN
2015-06-30 18:58:06 NaN NaN NaN NaN
2015-06-30 18:58:08 NaN NaN NaN NaN
2015-06-30 18:58:10 NaN NaN NaN NaN
2015-06-30 18:58:12 NaN NaN NaN NaN
2015-06-30 18:58:14 NaN NaN NaN NaN
... ... ... ... ...
2015-07-01 13:57:56 NaN NaN NaN NaN
2015-07-01 13:57:58 NaN NaN NaN NaN
2015-07-01 13:58:00 NaN NaN NaN NaN
2015-07-01 13:58:02 NaN NaN NaN NaN
2015-07-01 13:58:04 NaN NaN NaN NaN
2015-07-01 13:58:06 NaN NaN NaN NaN
2015-07-01 13:58:08 NaN NaN NaN NaN
2015-07-01 13:58:10 NaN NaN NaN NaN
2015-07-01 13:58:12 NaN NaN NaN NaN
2015-07-01 13:58:14 NaN NaN NaN NaN
2015-07-01 13:58:16 NaN NaN NaN NaN
2015-07-01 13:58:18 NaN NaN NaN NaN
2015-07-01 13:58:20 NaN NaN NaN NaN
2015-07-01 13:58:22 NaN NaN NaN NaN
2015-07-01 13:58:24 NaN NaN NaN NaN
2015-07-01 13:58:26 NaN NaN NaN NaN
2015-07-01 13:58:28 NaN NaN NaN NaN
2015-07-01 13:58:30 NaN NaN NaN NaN
2015-07-01 13:58:32 NaN NaN NaN NaN
2015-07-01 13:58:34 NaN NaN NaN NaN
2015-07-01 13:58:36 NaN NaN NaN NaN
2015-07-01 13:58:38 NaN NaN NaN NaN
2015-07-01 13:58:40 NaN NaN NaN NaN
2015-07-01 13:58:42 NaN NaN NaN NaN
2015-07-01 13:58:44 NaN NaN NaN NaN
2015-07-01 13:58:46 NaN NaN NaN NaN
2015-07-01 13:58:48 NaN NaN NaN NaN
2015-07-01 13:58:50 NaN NaN NaN NaN
2015-07-01 13:58:52 NaN NaN NaN NaN
2015-07-01 13:58:54 NaN NaN NaN NaN

34250 rows × 4 columns


In [ ]: