2017-01-22 1 views
1

팬더 데이터 프레임 사전이 상당히 많습니다. 키는 주식 기호이며 각 데이터 프레임에는 주식 시장 데이터가 포함 된 14 개의 열이 있습니다. 예를 들어 :루프에서 팬더 데이터 프레임에 롤링 평균을 추가하는 데는 오래 걸림

eodscreen['AAPL'] 
Out[35]: 
       date open high  low close  volume ex-dividend \ 
date                   
2010-01-04 2010-01-04 5.82 5.980 5.8000 5.98 685500.0   0.0 
2010-01-05 2010-01-05 5.99 6.000 5.8300 5.93 419500.0   0.0 
... 
... 

나는 '가까운'열의 이동 평균을 포함, 'MA'라고 각각 재고에 대한 새로운 열을 추가하기 위해 노력하고있어.

for k in eodscreen: 
    eodscreen[k]['MA'] = eodscreen[k]['close'].rolling(window=5).mean() 

이 코드가 실행하는 데 약 3 분 정도 걸립니다 (몇 년에 이전 노트북, i7의 16 기가 바이트 RAM ...) :

여기 내 간단한 루프입니다.

다음 경고가 표시됩니다. 문제의 일부를 설명 할 수 있습니까?

> A value is trying to be set on a copy of a slice from a DataFrame. Try 
> using .loc[row_indexer,col_indexer] = value instead 

'대형'사전에 대한 느낌이별로 없기 때문에 꽤 정상입니까?

사전 : 각각 데이터 프레임을 포함하는 1600 개의 키.

각 데이터 프레임 : 날짜 열 1 개, float64 열 13 개, 열당 1740 개 행.

예상되는 경우 프로그램에서 이러한 데이터를로드하고 액세스하는 방법에 대한 통찰력을 제공 할 수 있습니까? 그것은 모두 ~ 400MB csv 파일에 저장되어 있으며 프로그램 시작시에이 파일을 모두로드하고 사전에있는 모든 것을 구성합니다. 1 주식 기호의 데이터 만 읽거나, 원하는 수학을 수행하고, 파일을 다시 쓰는 것이 더 낫겠습니까? 아니면 내가 기억에서 쉽게 할 수 있다고 생각하는 올바른 길을 가고 있습니다.

의견/통계를 제공해 주시면 대단히 감사하겠습니다.

고맙습니다.

답변

1

다른 데이터 프레임의보기가되는 슬라이스 조각에 할당하려고합니다. 그것은 당신이 처음에 어떻게 사전을 만들었 기 때문에 발생했습니다. 주위

일 :

for k in eodscreen: 
    eodscreen[k] = eodscreen[k].assign(MA=df['close'].rolling(window=5).mean()) 

나는이 일을해야 제안하고있어 그 이유는 당신이 사전의 키에 새 열로 dataframe의 사본을 재 할당하는 것입니다.

+0

5 초 만에 실행되는 와우. 나는 너의 설명을 정말로 이해하지 못한다. 내 사전이 내 생각과 다르지 않니? – user1687185

+0

그것이 당신이 생각하는 것입니다. 데이터 프레임 중 하나의'is_copy' 속성을 확인하십시오. 그것은'<약한 참조>'또는 무엇인가 이상한 것으로 돌아올 것입니다. 이는 다른 데이터 프레임의 복사본임을 의미하므로 경고 메시지가 나타납니다. 'eodscreen [k] = panel [k]'와 같은 패널에서 각 키에 값을 할당했을 수 있습니다. 이는 패널의 조각을 데이터 프레임으로 할당했을 것이지만'panel [k]' 'panel.loc [k]'대신 새로운 새로운 데이터 프레임 대신 사본을 얻습니다. 태국인이 경고가 당신에게 말하려고 한 것입니다. 'panel.loc [k]'를 사용하십시오. – piRSquared

+0

흠. 그래서 내 사전은 '원래'라는 'eodall'에서 한 날짜 화면에서 나옵니다. 'eodscreen = {k : eodall [k].ix [시작일 : 종료일] eodall에서 k를 위해}' 내 'eodscreen'사전은 새 사전이 아니지만 eodall과 같은 데이터를 가리키며 하위 집합 만 가리키고 있습니까? – user1687185

관련 문제