2017-04-23 6 views
1

데이터 프레임의 행을 반복하면서 하나의 행만 제외하고는 각 행을 상위 데이터 프레임의 형식과 완전히 동일한 데이터 프레임으로 유지합니다. DataFrame()을 호출하고 인덱스와 열을 전달하는 것에 대해 알고 있습니다. 그러나 어떤 이유로 이것이 부모 데이터 프레임과 동일한 형식을 항상 제공하지는 않습니다. 시리즈 (즉, 행)에서 to_frame()을 호출하면 데이터 프레임으로 다시 캐스팅되지만 자주 바뀌거나 상위 데이터 프레임 형식과 다른 방식으로 바뀝니다. 이 작업을 수행하는 쉬운 방법이 없으며 항상 각 행에 대해 동일한 형식이 될 것이라고 보장 할 수 있습니까?데이터 프레임의 행을 반복하면서 각 행을 데이터 프레임으로 유지

def transact(self, orders): 
    # Buy or Sell 
    if len(orders) > 1: 
     empty_order = orders.iloc[0:0] 
     for index, order in orders.iterrows(): 
      empty_order.loc[index] = order 
      #empty_order.append(order) 
      self.sub_transact(empty_order) 
    else: 
     self.sub_transact(orders) 

은 본질적으로, 나는 dataframe을 비우고 다시 그것으로, for 루프에서 시리즈를 삽입 : 여기

는 지금까지 내 최고의 솔루션으로 해낸 것입니다. 이 올바르게 작동하지만 다음과 같은 경고 제공 :

C : \ 사용자 \ BNielson 구글 드라이브 \ 내 파일 \ 기계 학습 \ 파이썬 기계 학습 \ ML4T_Ex2_1.py \ : 57 : SettingWithCopyWarning : 값은 시도 DataFrame에서 슬라이스 사본에 설정됩니다. empty_order.loc [index] = order C : \ Users \ BNielson \ Anaconda3 \ envs \ PythonMachineLearning \ lib \ site-packages \ pandas \ core \ indexing.py : 477 : SettingWithCopyWarning : 값이 DataFrame에서 슬라이스 복사본에 설정하려고합니다. .loc 사용해보십시오 [row_indexer는 col_indexer] = 값 대신 은 설명서의주의 사항 참조 : http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj를 [항목] =의

그래서의 경고주는이 라인 :

empty_order.loc[index] = order 

을 이것은 특히 이상합니다. .loc을 이미 사용하고 있습니다. 보통 .loc을 사용하지 않을 때이 오류가 발생합니다.

+1

문제를 복제하는 동일한 데이터 및 코드를 제공 할 수 있습니까? –

+0

예, 실제로 작동 한 코드를 추가했습니다. 진리는 상당히 상황에 따라 다르기 때문에 설명하기가 약간 어렵습니다. 결론은 데이터 프레임의 각 행이 정확히 동일한 인덱싱 (한 행만)과 열을 갖기를 원한다는 것입니다. 이 방법을 사용하면 Series 나 Dataframe을 가지고 있고 내가 가지고있는 것에 따라 다르게 작동하는지를 묻지 않아도됩니다. –

+0

특히 내가 사용하고있는 .loc을 사용하지 않는다면 문서가 얻을 수 있다고 제안 할 때 특히 그 경고를 얻는 것은 실망 스럽습니다. 여기서 내가 구문 론적으로 사용하기를 원하는 것은 무엇입니까? –

답변

0

을 반복 할 때 groupby 각각의 모든 행에 대해 고유 한 값이 단일 행 dataframe를 얻을 수 있습니다 훨씬 더 쉬운 방법으로이 있음을 조작 내가 원하는 것을해라.

order.to_frame().T 

그래서 ...

 if len(orders) > 1: 
     for index, order in orders.iterrows(): 
      self.sub_transact(order.to_frame().T) 
    else: 
     self.sub_transact(orders) 

이것이 실제로 수행하는 것은이 다시 dataframe에 (여전히 필요한 열 및 인덱스 정보 포함) 시리즈를 변환합니다. 그러나 일부 모로닉 (하지만 파이톤 식)은 이전 행이 이제는 열이고 이전 열은 이제 여러 행이되도록 전치합니다. 그래서 당신은 그것을 다시 조 변경합니다.

0

groupby을 고유 목록과 함께 사용하십시오. groupby은 정확히 무엇을 요구하고 있는지, 각 그룹을 반복하며 각 그룹은 데이터 프레임입니다. 그래서, 경우에 당신은 그런 당신이 group

for n, group in df.groupby(np.arange(len(df))): 
    pass 
    # do stuff 
관련 문제