2016-07-12 4 views
2

보자. 다음과 같은 dask 데이터 프레임이 있습니다.인덱스 목록을 기준으로 dask 데이터 프레임에서 데이터를 선택하려면 어떻게해야합니까?

dict_ = {'A':[1,2,3,4,5,6,7], 'B':[2,3,4,5,6,7,8], 'index':['x1', 'a2', 'x3', 'c4', 'x5', 'y6', 'x7']} 
pdf = pd.DataFrame(dict_) 
pdf = pdf.set_index('index') 
ddf = dask.dataframe.from_pandas(pdf, npartitions = 2) 

또한 색인에 대한 목록이 있습니다.

인덱스로 지정된 행만 포함하는 새 dask 데이터 프레임을 어떻게 만들 수 있습니까? ddf [ddf.A> = 4]와 같은 someting이 가능한 이유가 있습니까? indices_i_want_to_select의 ddf [ddf.index] 또는 ddf.loc [indices_i_want_to_select]가 아닌 이유는 무엇입니까?

+0

목록의 'loc'은 아직 지원되지 않습니다. https://github.com/dask/dask/issues/1298을 참조하십시오. – MRocklin

+0

이 정보를 제공해 주셔서 감사합니다. 나는 loc을 사용하는 것을 주장하지 않고, 인덱스 목록을 기반으로하는 dask 데이터 프레임을 생성 할 수있는 가능한 모든 방법이 유용 할 것입니다. 현재, 나는 조금 붙어있다. –

+0

당신은'map_partitions'을 가지고 뭔가를 해킹 할 수 있어야합니다. – MRocklin

답변

2

다음은 작동하는 것 같다 :

import pandas as pd 
import dask.dataframe as dd 

#generate example dataframe 
pdf = pd.DataFrame(dict(A = [1,2,3,4,5], B = [6,7,8,9,0]), index=['i1', 'i2', 'i3', 4, 5]) 
ddf = dd.from_pandas(pdf, npartitions = 2) 

#list of indices I want to select 
l = ['i1', 4, 5] 

#generate new dask dataframe containing only the specified indices 
ddf_selected = ddf.map_partitions(lambda x: x[x.index.isin(l)], meta = ddf.dtypes) 

편집이에만 적합 결과의 순서가 중요하지 않은 경우.

+0

이 예제는 빈 시리즈를 반환합니다. 이것은 내 자신의 코드에서 발생한 동일한 문제입니다. 내가 놓친 게 있니? –

+1

아하, 차이점은 인덱스 또는 다른 열 값에 메서드를 적용하는 것입니다. 다른 컬럼 값의 경우, 간단히 다음을 사용하십시오 :'ddf_selected = ddf [ddf.B.isin (l)]' –