728x90
반응형
질문 : DataFrame 행 셔플
다음 DataFrame이 있습니다.
Col1 Col2 Col3 Type
0 1 2 3 1
1 4 5 6 1
...
20 7 8 9 2
21 10 11 12 2
...
45 13 14 15 3
46 16 17 18 3
...
DataFrame은 csv 파일에서 읽습니다. Type
1이있는 모든 행이 맨 위에 있고 Type
2가있는 행, Type
3이있는 행 등이 뒤 따릅니다.
Type
이 혼합되도록 DataFrame의 행 순서를 섞고 싶습니다. 가능한 결과는 다음과 같습니다.
Col1 Col2 Col3 Type
0 7 8 9 2
1 13 14 15 3
...
20 1 2 3 1
21 10 11 12 2
...
45 4 5 6 1
46 16 17 18 3
...
이것을 어떻게 할 수 있습니까?
답변
Pandas로이를 수행하는 관용적 인 방법은 .sample
메서드를 사용하여 교체없이 모든 행을 샘플링하는 것입니다.
df.sample(frac=1)
frac
키워드 인수는 임의 샘플에서 반환 할 행의 비율을 지정하므로 frac=1
은 모든 행을 임의 순서로 반환 함을 의미합니다.
참고 : 데이터 프레임을 제자리에서 섞고 인덱스를 재설정하려면 다음을 수행 할 수 있습니다.
df = df.sample(frac=1).reset_index(drop=True)
여기서 drop=True
지정하면 .reset_index
가 이전 인덱스 항목을 포함하는 열을 만들지 못합니다.
후속 참고 사항 : 위의 작업이 제자리에 있는 것처럼 보이지는 않지만 python / pandas는 셔플 된 객체에 대해 다른 malloc을 수행하지 않을만큼 똑똑합니다. 즉, 목표물이 변경된 경우에도,이다 (여기서 I 평균하여 id(df_old)
와 동일하지 id(df_new)
), 기본 C 오브젝트는 여전히 동일하다. 이것이 실제로 사실임을 보여주기 위해 간단한 메모리 프로파일 러를 실행할 수 있습니다.
$ python3 -m memory_profiler .\test.py
Filename: .\test.py
Line # Mem usage Increment Line Contents
================================================
5 68.5 MiB 68.5 MiB @profile
6 def shuffle():
7 847.8 MiB 779.3 MiB df = pd.DataFrame(np.random.randn(100, 1000000))
8 847.9 MiB 0.1 MiB df = df.sample(frac=1).reset_index(drop=True)
출처 : https://stackoverflow.com/questions/29576430/shuffle-dataframe-rows
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python에서 switch 문을 사용하는 방법 (0) | 2021.08.03 |
---|---|
파이썬에서 "at"(@) 기호의 역할 (0) | 2021.07.30 |
Python 3에서 raw_input을 사용하는 방법 (0) | 2021.07.28 |
Python에서 현재 사용자 이름을 가져 오는 방법 (0) | 2021.07.28 |
함수 호출에서 별표 및 이중 별표 연산자가 의미하는 것 (0) | 2021.07.27 |