programing

목록 색인을 기준으로 판다 행 선택

javamemo 2023. 6. 29. 19:41
반응형

목록 색인을 기준으로 판다 행 선택

나는 있습니다dataframe df:

20060930  10.103       NaN     10.103   7.981
20061231  15.915       NaN     15.915  12.686
20070331   3.196       NaN      3.196   2.710
20070630   7.907       NaN      7.907   6.459

그런 다음 목록에 표시된 특정 시퀀스 번호가 있는 행을 선택합니다. 여기에 [1,3]이 있고 왼쪽이 있다고 가정합니다.

20061231  15.915       NaN     15.915  12.686
20070630   7.907       NaN      7.907   6.459

어떻게 또는 어떤 기능이 그것을 할 수 있습니까?

사용하다.iloc정수 기반 인덱싱 및.loc레이블 기반 인덱싱에 사용됩니다.아래 예를 참조하십시오.

ind_list = [1, 3]
df.iloc[ind_list]

iloc를 사용할 수도 있습니다.

df.iloc[[1,3],:]

데이터 프레임의 인덱스가 이전 계산으로 인해 행 순서와 일치하지 않으면 이 작업이 수행되지 않습니다.이 경우 다음을 사용합니다.

df.index.isin([1,3])

다른 응답에서 제안된 바와 같이.

다른 방법(긴 코드이지만)이지만 위의 코드보다 빠릅니다.%timeit 함수를 사용하여 확인:

df[df.index.isin([1,3])]

PS: 당신은 그 이유를 알아냅니다.

enter image description here

한다면index_list원하는 인덱스가 포함되어 있습니다. 다음을 수행하여 원하는 행이 있는 데이터 프레임을 얻을 수 있습니다.

index_list = [1,2,3,4,5,6]
df.loc[df.index[index_list]]

이것은 2021년 3월 현재 최신 문서에 근거한 것입니다.

대규모 데이터셋의 경우 다음을 통해 선택한 행만 읽는 것이 메모리 효율적입니다.skiprows매개 변수

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

이제 1과 3을 제외한 모든 행을 건너뛰는 파일에서 DataFrame을 반환합니다.


세부 사항

문서에서:

skiprows목록 형식, 정수 또는 호출 가능, 기본값None

...

호출 가능한 경우 호출 가능한 함수는 행 인덱스에 대해 평가되며, 행을 건너뛸 경우 True를 반환하고 그렇지 않으면 False를 반환합니다.유효한 호출 가능 인수의 예는 다음과 같습니다.lambda x: x in [0, 2]

이 기능은 버전 Panda 0.20.0+에서 작동합니다.해당 이슈 및 관련 게시물도 참조하십시오.

이 문제를 해결하는 방법은 여러 가지가 있으며, 위에 나열된 방법은 가장 일반적으로 사용되는 해결 방법입니다.누군가 대안을 찾을 경우를 대비해 두 가지 방법을 더 추가하고 싶습니다.

index_list = [1,3]

df.take(pos)

#or

df.query('index in @index_list')

인덱스별로 데이터 프레임을 필터링하려고 합니다.현재 판다에게 그렇게 하는 가장 좋은 방법은 다음과 같습니다.

단일 인덱스

desired_index_list = [1,3]
df[df.index.isin(desired_index_list)]

다중 인덱스

desired_index_list = [1,3]
index_level_to_filter = 0
df[df.index.get_level_values(index_level_to_filter).isin(desired_index_list)]

필터링된 인덱스에서 새 DataFrame을 가져오는 방법

저의 문제로, 저는 인덱스에서 새로운 데이터 프레임이 필요했습니다.이를 위한 간단한 방법을 찾았습니다.

iloc_list=[1,2,4,8]
df_new = df.filter(items = iloc_list , axis=0)

이를 사용하여 열을 필터링할 수도 있습니다.자세한 내용은 설명서를 참조하십시오.

언급URL : https://stackoverflow.com/questions/19155718/select-pandas-rows-based-on-list-index

반응형