2014-07-20 7 views
1

이것은 여러 부분으로 구성된 질문입니다. 나는 모든 것을 함께 결합하는 것처럼 보이지 않습니다.팬더 - 다중 데이터 프레임 병합

ticker = 'GOLD' 
date = pd.to_datetime('1978/03/31') 
current_bar = df.ix[ticker].ix[date] 

나는 그럼 그냥 말할 수 : current_bar.Last을 목표는 다음과 같이 내가 액세스 할 수 있습니다 (MultiIndex를 사용하여 추측) 하나 DataFrame를 만들 수 있나요?

어쨌든 여기에 파일이 있으며 파일을로드하는 방법은 다음과 같습니다. 이상적으로

In [108]: df = pd.read_csv('GOLD.csv', parse_dates='Date', index_col='Date') 
In [109]: df 
Out[109]: 
      Exp  Last  Volume 
Date 
1978-03-30 198002 995.6 54 
1978-03-31 198002 999.5 78 

In [110]: df2 = pd.read_csv('SPX.csv', parse_dates='Date', index_col='Date') 
In [111]: df2 
Out[111]: 
      Exp  Last  Volume 
Date 
1978-03-30 198003 215.5 25 
1978-03-31 198003 214.1 99 

, 나는 (나는 생각한다)는 다음과 같이 할 :

  1. ticker  GOLD       SPX 
    values  Exp  Last  Volume  Exp  Last  Volume 
    Date 
    1978-03-30 198002 995.6 54   198003 215.5 25 
    1978-03-31 198002 999.5 78   198003 214.1 99 
    
    은 내 질문이 추측 :
    • 가 어떻게이 계층을 만들 수 있죠 (실제 데이터
    • 파일을 결합하려면 어떻게해야합니까? (모두 1 개의 DataFrame에 모두 들어갈 필요가 있습니다)
    • 내 가정은 내가 할 수있는 올바른 올바른 : current_bar.Last 값을 얻으려면?

감사합니다.

답변

4

pd.concat부터 까지를 DataFrames로 연결할 수 있습니다. (을 연결하면 병합은 공통 색인 또는 열을 기반으로 DataFrame을 조인합니다.

In [147]: result['Last'] 
Out[147]: 
ticker  GOLD SPX 
Date      
1978-03-30 995.6 215.5 
1978-03-31 999.5 214.1 

내가 그것을 때문에 구문 result.Last을 피하는 것을 권 해드립니다 :

import pandas as pd 
df = pd.read_csv('GOLD.csv', parse_dates='Date', index_col='Date', sep='\s+') 
df2 = pd.read_csv('SPX.csv', parse_dates='Date', index_col='Date', sep='\s+') 
result = pd.concat([df, df2], keys=['GOLD', 'SPX'], names=['ticker']).unstack('ticker') 
result = result.reorder_levels([1, 0], axis=1).sortlevel(level=0, axis=1) 
print(result) 

ticker  GOLD     SPX    
       Exp Last Volume  Exp Last Volume 
Date              
1978-03-30 198002 995.6  54 198003 215.5  25 
1978-03-31 198002 999.5  78 198003 214.1  99 

result['Last']가 DataFrame을 산출 산출 : 당신이 keys 매개 변수를 제공하면 계층 인덱스를 얻을 이 (가) result.last에 너무 가까워 DataFrame 메서드를 반환합니다.


당신은 다음과 같은 코드를 사용할 수 있습니다, 더 많은 파일을 처리하려면,이 메모리 플러스 result을 유지하기에 충분한 메모리에있는 모든 DataFrames의 목록을 유지하기에 충분한 메모리를 필요로한다는 것을

import pandas as pd 
dfs = list() 
for filename in filenames: 
    df = pd.read_csv(filename, parse_dates='Date', index_col='Date') 
    # compute moving_mean 
    dfs.append(df) 

keys = [filename[:-4] for filename in filenames] 
result = pd.concat(dfs, keys=keys, names=['ticker']).unstack('ticker') 

참고.

+0

알 수 있습니다. 'df'에 'df'를 추가하려면 (예 : 'NDX') 결과에 이미 2가있는 경우 키에 대해 무엇을 사용할 수 있습니까? (단지 100 개의 파일에 대해이 작업을 수행해야하므로 반복적으로 수행하는 방법이 필요합니다. 감사합니다. – trubby317

+0

'pd.concat'의 첫 번째 인수는 100 개의 DataFrames 목록이 될 수 있으며'keys'는 100 개의 ticker 목록이 될 수 있습니다 예를 들어, 3 개의 DataFrames를 연결하려면 : result = pd.concat ([df, df2, df3], keys = [ 'GOLD', 'SPX', 'NDX'], names = [ 'ticker']). – unutbu

+0

결과는 다음과 같습니다 : result = pd.concat ([result, df3], keys = [result.keys, 'NDX'], names = [ 'ticker']) .unstack ('ticker')? – trubby317