나는 이것이 간단해야한다고 생각하지만 몇 가지 아이디어를 시도했지만 그중 어느 것도 작동하지 않았습니다.
last_row = len(DF)
DF = DF.drop(DF.index[last_row]) #<-- fail!
음수 인덱스를 사용해 보았지만 오류가 발생했습니다. 나는 여전히 기본적인 것을 오해하고있을 것입니다.
답변
마지막 n 개 행을 삭제하려면 :
df.drop(df.tail(n).index,inplace=True) # drop last n rows
같은 맥락에서 처음 n 개의 행을 삭제할 수 있습니다.
df.drop(df.head(n).index,inplace=True) # drop first n rows
답변
DF[:-n]
여기서 n은 삭제할 마지막 행 수입니다.
마지막 행을 삭제하려면 :
DF = DF[:-1]
답변
파이썬 인덱스 위치가 계 0이므로, 실제의 요소가되지 index
위치에 대응에 len(DF)
. 당신은 그것이 필요합니다 last_row = len(DF) - 1
:
In [49]: dfrm
Out[49]:
A B C
0 0.120064 0.785538 0.465853
1 0.431655 0.436866 0.640136
2 0.445904 0.311565 0.934073
3 0.981609 0.695210 0.911697
4 0.008632 0.629269 0.226454
5 0.577577 0.467475 0.510031
6 0.580909 0.232846 0.271254
7 0.696596 0.362825 0.556433
8 0.738912 0.932779 0.029723
9 0.834706 0.002989 0.333436
[10 rows x 3 columns]
In [50]: dfrm.drop(dfrm.index[len(dfrm)-1])
Out[50]:
A B C
0 0.120064 0.785538 0.465853
1 0.431655 0.436866 0.640136
2 0.445904 0.311565 0.934073
3 0.981609 0.695210 0.911697
4 0.008632 0.629269 0.226454
5 0.577577 0.467475 0.510031
6 0.580909 0.232846 0.271254
7 0.696596 0.362825 0.556433
8 0.738912 0.932779 0.029723
[9 rows x 3 columns]
그러나 작성하는 것이 훨씬 더 간단합니다 DF[:-1]
.
답변
놀랍게도 아무도 이것을 가져 오지 않았습니다.
# To remove last n rows
df.head(-n)
# To remove first n rows
df.tail(-n)
1000 행의 DataFrame에서 속도 테스트를 실행하면 슬라이싱 및 head
/ tail
가 drop
다음을 사용하는 것보다 ~ 6 배 빠릅니다 .
>>> %timeit df[:-1]
125 µs ± 132 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit df.head(-1)
129 µs ± 1.18 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit df.drop(df.tail(1).index)
751 µs ± 20.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
답변
stats = pd.read_csv("C:\\py\\programs\\second pandas\\ex.csv")
통계의 출력 :
A B C
0 0.120064 0.785538 0.465853
1 0.431655 0.436866 0.640136
2 0.445904 0.311565 0.934073
3 0.981609 0.695210 0.911697
4 0.008632 0.629269 0.226454
5 0.577577 0.467475 0.510031
6 0.580909 0.232846 0.271254
7 0.696596 0.362825 0.556433
8 0.738912 0.932779 0.029723
9 0.834706 0.002989 0.333436
그냥 사용 skipfooter=1
skipfooter : int, 기본값 0
건너 뛸 파일 하단의 줄 수
stats_2 = pd.read_csv("C:\\py\\programs\\second pandas\\ex.csv", skipfooter=1, engine='python')
stats_2의 출력
A B C
0 0.120064 0.785538 0.465853
1 0.431655 0.436866 0.640136
2 0.445904 0.311565 0.934073
3 0.981609 0.695210 0.911697
4 0.008632 0.629269 0.226454
5 0.577577 0.467475 0.510031
6 0.580909 0.232846 0.271254
7 0.696596 0.362825 0.556433
8 0.738912 0.932779 0.029723
답변
drop은 새 배열을 반환하므로 og post에서 질식했습니다. 일부 열 헤더의 이름을 바꾸고 Dataframe으로 변환 된 잘못된 형식의 csv 파일로 인해 일부 행을 삭제해야하는 유사한 요구 사항이 있었으므로이 게시물을 읽은 후 다음을 사용했습니다.
newList = pd.DataFrame(newList)
newList.columns = ['Area', 'Price']
print(newList)
# newList = newList.drop(0)
# newList = newList.drop(len(newList))
newList = newList[1:-1]
print(newList)
위의 주석 처리 된 두 줄에서 볼 수 있듯이 훌륭하게 작동했습니다. 저는 drop. () 메서드를 사용해 보았지만 작동하지만 [n : -n]을 사용하는 것만 큼 쿨하고 읽기 어렵습니다. 누군가에게 도움이되기를 바랍니다. 감사합니다.
답변
다중 인덱스 (예 : “Stock”및 “Date”)가 있고 마지막 Stock의 마지막 행뿐 아니라 각 Stock에 대한 마지막 행을 제거하려는보다 복잡한 DataFrame의 경우 솔루션은 다음과 같습니다.
# To remove last n rows
df = df.groupby(level='Stock').apply(lambda x: x.head(-1)).reset_index(0, drop=True)
# To remove first n rows
df = df.groupby(level='Stock').apply(lambda x: x.tail(-1)).reset_index(0, drop=True)
(가)로 groupby()
다중 색인에 추가 수준을 추가 우리는 단지 사용 끝에 놓습니다 reset_index()
. 결과 df는 작업 전과 동일한 유형의 다중 인덱스를 유지합니다.