from pandas import Series, DataFrame
raw_data = {'': ['2018-01-01 12:00:00 AM', '2018-01-02 12:00:00 AM', '2018-01-03 12:00:00 AM', '2018-01-04 12:00:00 AM'],
'drop': [None, 1, None, None],
'collect': [None, None, None, 1]}
df = DataFrame(raw_data)
for row in df.iloc[0:df['drop'] ==True].iterrows(): #첫행부터 drop값이 존재하는 행까지에 대해 계산
if row['collect'] is True: #collect 값이 존재하면
startpoint=row[0] #그때의 시간값을 시작점에 저장
print(startpoint) #예상 결과값 : 2018-01-02 12:00:00 AM
for row in df.iloc[startpoint:df['collect'] ==True].iterrows(): #startpoint행부터 collect값이 존재하는 행까지에 대해 계산
if row['drop'] is True: #drop 값이 존재하면
startpoint=row[0] #그때의 시간값을 시작점에 저장
print(startpoint) #예상 결과값 : 2018-01-04 12:00:00 AM
.......................................................................................................................................
df 파일에 대해서 위의 코드처럼 실행을 시키고 싶은데요. df['drop'] 열의 값이 존재하는 row에 대해서 row[0] 값을 startpoint 변수에 저장하고 싶습니다.
에러는 아래처럼 뜹니다.
.......................................................................................................................................
Traceback (most recent call last):
File "C:/Users/serec/PycharmProjects/180929/주식+파이썬_Mr.O/질문용.py", line 8, in <module>
for row in df.iloc[0:df['drop'] ==True].iterrows(): #첫행부터 drop값이 존재하는 행까지에 대해 계산
File "C:\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 1478, in __getitem__
return self._getitem_axis(maybe_callable, axis=axis)
File "C:\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 2080, in _getitem_axis
return self._get_slice_axis(key, axis=axis)
File "C:\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 2048, in _get_slice_axis
slice_obj = self._convert_slice_indexer(slice_obj, axis)
File "C:\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 266, in _convert_slice_indexer
return ax._convert_slice_indexer(key, kind=self.name)
File "C:\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 1706, in _convert_slice_indexer
self._validate_indexer('slice', key.stop, kind),
File "C:\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 4145, in _validate_indexer
self._invalid_indexer(form, key)
File "C:\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 1863, in _invalid_indexer
kind=type(key)))
TypeError: cannot do slice indexing on <class 'pandas.core.indexes.range.RangeIndex'> with these indexers [0 False
1 True
2 False
3 False
Name: drop, dtype: bool] of <class 'pandas.core.series.Series'>
Process finished with exit code 1
-------------------------------------
꼬리말
* 게시글 내용 삭제시 레벨 강등
* 질문은 각 주제별 게시판에 적어주세요.
비트코인 암호화화폐 커뮤니티 땡글~ 땡글~
-------------------------------------
대략 원하시는 코드가 배열에 담긴값이 원하는 결과에 맞으면 해당 값을 특정 변수에 저장을 원하시는거 같은데
맞는지 모르겠네요.
정확히 어떤 로직을 원하시는건지 에러 부분만 처리를 하시고 싶으신건지
에러 내용은 TypeError: cannot do slice indexing on <class 'pandas.core.indexes.range.RangeIndex'> with these indexers
이겁니다.
즉 'drop': [None, 1, None, None], 이부분에서 1이라는 값은 허용 되지 않아서 오류가 발생 한겁니다.
현재 비교하는 부분에 대한 타입이 맞지 않습니다. 타입부분을 맞추시면 될듯 합니다.
첫배열은 날짜 인데 날짜를 숫자와 비교하면 에러가 발생 하겠죠.
이부분을 처리 할수 있도록 다시 처리 해주시는게 좋을듯 합니다.
몇번째 배열에 값이 있는지 찾는걸 원하신다면 raw_data 에 대한 길이를 찾으시고
drop 길이를 비교 하시면 값존재 여부를 확인 하실수 있을듯 합니다.