I am new to python. I have the following code:
data = {'deviceTimestamp' : ['2022-08-21 00:00:04.019345800','2022-08-21 00:00:09.666780800',
'2022-08-21 00:00:15.193316200','2022-08-21 00:00:20.708187',
'2022-08-21 00:00:26.212871600','2022-08-21 00:00:31.792147900',
'2022-08-21 00:00:37.345935900','2022-08-21 00:00:42.855598900',
'2022-08-21 00:00:48.380273','2022-08-21 00:00:53.894567100',
'2022-08-21 00:00:59.421452300','2022-08-21 00:01:04.994086700',
'2022-08-21 00:01:10.549778100','2022-08-21 00:01:16.067442300',
'2022-08-21 00:01:21.585345300','2022-08-21 00:01:27.123348',
'2022-08-21 00:01:32.657100400','2022-08-21 00:01:38.681526500',
'2022-08-21 00:01:44.254180800','2022-08-21 00:01:49.832247900',
'2022-08-21 00:01:55.404809800','2022-08-21 00:02:00.935254300',
'2022-08-21 00:02:06.456698200','2022-08-21 00:02:12.023842500',
'2022-08-21 00:02:17.601805600'],
'Failure_Sensor' : [0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,0,0]
}
df_failure_sensor = pd.DataFrame(data)
df_failure_sensor['Failure_Sensor_Transition'] = [df_failure_sensor['Failure_Sensor'][0]] + [(df_failure_sensor['Failure_Sensor'][i] if df_failure_sensor['Failure_Sensor'][i-1] != df_failure_sensor['Failure_Sensor'][i]
else (df_failure_sensor['Failure_Sensor'][i] if((df_failure_sensor['Failure_Sensor'][i+1] != df_failure_sensor['Failure_Sensor'][i]))
else ""))
for i in range(0, len(df_failure_sensor))]
When running this code I am getting the following error: ValueError: -1 is not in range
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\indexes\range.py in get_loc(self, key, method, tolerance)
384 try:
--> 385 return self._range.index(new_key)
386 except ValueError as err:
ValueError: -1 is not in range
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
C:\Users\ABDALL~1\AppData\Local\Temp/ipykernel_19832/4208152234.py in <module>
15 }
16 df_failure_sensor = pd.DataFrame(data)
---> 17 df_failure_sensor['Failure_Sensor_Transition'] = [df_failure_sensor['Failure_Sensor'][0]] + [(df_failure_sensor['Failure_Sensor'][i] if df_failure_sensor['Failure_Sensor'][i-1] != df_failure_sensor['Failure_Sensor'][i]
18 else (df_failure_sensor['Failure_Sensor'][i] if((df_failure_sensor['Failure_Sensor'][i+1] != df_failure_sensor['Failure_Sensor'][i]))
19 else ""))
C:\Users\ABDALL~1\AppData\Local\Temp/ipykernel_19832/4208152234.py in <listcomp>(.0)
15 }
16 df_failure_sensor = pd.DataFrame(data)
---> 17 df_failure_sensor['Failure_Sensor_Transition'] = [df_failure_sensor['Failure_Sensor'][0]] + [(df_failure_sensor['Failure_Sensor'][i] if df_failure_sensor['Failure_Sensor'][i-1] != df_failure_sensor['Failure_Sensor'][i]
18 else (df_failure_sensor['Failure_Sensor'][i] if((df_failure_sensor['Failure_Sensor'][i+1] != df_failure_sensor['Failure_Sensor'][i]))
19 else ""))
~\anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)
940
941 elif key_is_scalar:
--> 942 return self._get_value(key)
943
944 if is_hashable(key):
~\anaconda3\lib\site-packages\pandas\core\series.py in _get_value(self, label, takeable)
1049
1050 # Similar to Index.get_value, but we do not fall back to positional
-> 1051 loc = self.index.get_loc(label)
1052 return self.index._get_values_for_loc(self, loc, label)
1053
~\anaconda3\lib\site-packages\pandas\core\indexes\range.py in get_loc(self, key, method, tolerance)
385 return self._range.index(new_key)
386 except ValueError as err:
--> 387 raise KeyError(key) from err
388 raise KeyError(key)
389 return super().get_loc(key, method=method, tolerance=tolerance)
KeyError: -1
How can I solve this issue keeping in mind that the conditions should remain as they are ?
I tried using a different approach here is the following and applying the same list comprehension:
df_failure_sensor = df_failure_sensor['Failure_Sensor'].values.tolist()
df_failure_sensor_transition = [df_failure_sensor [0]] + [(df_failure_sensor [i] if df_failure_sensor [i-1] != df_failure_sensor [i]
else (df_failure_sensor [i] if (df_failure_sensor [i+1]!=df_failure_sensor [i])
else ''))
for i in range(0,len(df_failure_sensor )-1)]
df_failure_sensor = pd.DataFrame(df_failure_sensor_transition , columns=['Failure_Transition'])
df_failure_sensor = df_failure_sensor [df_failure_sensor ['Failure_Transition'] != '']
This approach works but I can't continue my code because I also need the deviceTimestamp afterwards
Does someone have a solution for this problem ?