Я хочу использовать for-loop
, чтобы найти последовательные периоды времени на основе другого столбца data
в df
, ie. периоды времени (определенные с использованием меток времени начала и конца), где data
> 20. В df
, timestamp
составлен указатель. Я думаю, что проблема в том, что в l oop я не указал правильно, чтобы выбрать строку из столбца индекса в кадре данных.
for-loop
:
for i in range(len(df3)):
if i >0:
activities = []
start_time = None
if (df.loc[i, 'data'] >= 20):
if start_time == None:
start_time = df.loc[i, 'timestamp']
else:
if start_time != None:
end_time = df.loc[i-1, 'timestamp']
duration = (end_time - start_time).seconds
activities.append((duration, start_time, end_time))
start_time = None
return activities
df
:
id timestamp data Date sig events
timestamp
2020-01-15 06:12:49.213 40250 2020-01-15 06:12:49.213 20.0 2020-01-15 -1.0 1.0
2020-01-15 06:12:49.313 40251 2020-01-15 06:12:49.313 19.5 2020-01-15 1.0 0.0
2020-01-15 08:05:10.083 40256 2020-01-15 08:05:10.083 20.0 2020-01-15 1.0 0.0
Возвращено:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-9853026603d5> in <module>()
9
10
---> 11 if (df.loc[i, 'data'] >= 20):
12
13 if start_time == None:
7 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/indexes/base.py in _invalid_indexer(self, form, key)
3074 """
3075 raise TypeError(
-> 3076 f"cannot do {form} indexing on {type(self)} with these "
3077 f"indexers [{key}] of {type(key)}"
3078 )
TypeError: cannot do index indexing on <class 'pandas.core.indexes.datetimes.DatetimeIndex'> with these indexers [1] of <class 'int'>
Обновление:
По предложению @jcaliz, я попробовал приведенный ниже код и изменил отступы для return
для разных вариантов:
for i in range(len(df)):
if i >0:
activities = []
start_time = None
if (df.iloc[I].data >= 20):
if start_time == None:
start_time = df.iloc[i].timestamp
else:
if start_time != None:
end_time = df.iloc[i-1].timestamp
duration = (end_time - start_time).seconds
activities.append((duration, start_time, end_time))
start_time = None
return activities
, но с той же ошибкой:
File "<ipython-input-24-d78e4605aebe>", line 31
return activities
^
SyntaxError: 'return' outside function