2012-08-23 3 views
0

대용량 파일 (~ 480MB, 5,250,000 개의 레코드, 주가 일일 데이터 -dt, o, h, l, c, v)을로드하려고했습니다. , val, adj, fv, sym, code - 약 4,500 개의 악기)를 사용하여 팬더에 넣습니다. 그것은 잘 실행되고 DataFrame을 만듭니다. 그러나 패널로 변환 할 때 여러 주식의 값이 떨어져 있고 원래의 CSV 파일의 값과 아무데도 가깝지 않은 것으로 나타났습니다. 큰 파일을 파이썬 팬더에 read_csv를 사용하여 패널로 변환 할 때

나는 다음 read_csv에서 chunksize 영역 매개 변수를 사용하려고 시도하고 루프를 사용 :

reader = read_csv("bigfile.csv",index_col=[0,9],parse_dates=True,names=['n1','n2',...,'nn'], chunksize=100000) 

new_df = DataFrame(reader.get_chunk(1)) 

for chunk in reader: 
    new_df = concat(new_df, chunk) 

이이 데이터를 읽지 만 :

  1. 내가 잘못된 같은 얻을 값 (편집 :)을 패널로 변환 할 때
  2. 일반 read_csv보다 오래 걸림 (반복기 없음)

어떤 아이디어라도이 문제를 해결하는 방법은 무엇입니까?

편집 : 문제를 반영하여 질문을 변경했습니다. 데이터 프레임이 좋으며 패널로 변환하는 것이 문제입니다. 입력 된 CSV 파일을 분할하고 병합 한 다음 패널로 변환 한 후에도 오류가 표시됩니다. 다중 인덱스 DataFrame을 유지 관리하면 문제가 없으며 값이 올바르게 표시됩니다.

+1

문제가 CSV 파일에있는 것 같습니다. 예상치 못한 위치에 구분 기호 문자가 포함되어 CSV 구문 분석이 잘못 될 수 있습니다. 처음에는 데이터 사본 인 테스트 파일을 작성하여 문제의 범위를 좁히고 문제의 원인이되는 파일 부분을 0으로 만들 때까지 점진적으로 파일의 일부를 제거하십시오. – BrenBarn

+0

디버깅 할 수 있도록 파일을 나와 공유 할 수 있습니까? https://github.com/pydata/pandas/issues/1855에서 문제를 만들었습니다. 공개 데이터가 아니라면 직접 메일을 보낼 수 있습니까? wmail.com에서 직접 메일을 보내십시오. –

답변

0

특정 값이 얼마인지 알면 CSV 파일에서 해당 행을 조사하면됩니다. dialectsSniffer class의 측면에서 특히 docs on csv을 확인해야합니다. 파일의 구분 방식을 올바르게 감지 할 수있는 설정을 찾을 수 있습니다.

특정 줄만 보았을 때 오류가 사라진다는 것을 알게되면 아마도 어딘가에 물건을 던져 버리는 잘못된/누락 된 줄 바꿈이 있음을 의미합니다.

마지막으로 올바른/잘못된 줄 패턴을 찾지 못하는 경우 csv 파일에서 줄의 하위 집합을 (임의로 또는 다른 방식으로) 선택하고 크기 때문에 오류가 발생하는지 확인하십시오 파일의 (나는 이것이있을 법하지 않겠지 만, 나는 잘 모르겠다).

+0

@ BrenBarn의 제안에 따라 큰 파일을 두 개로 나누었습니다. 반으로는 아니지만 공격 라인부터. 두 개의 데이터 프레임, 즉 df1과 df2로 끝납니다. 그런 다음'df1.join (df2)'를 사용하여 하나의 대형 DataFrame을 제공했습니다. 그것 자체에, DataFrame 괜찮아요 - 잘못된 값의 문제는 내가'to_panel()'을 사용하여 DataFrame을 패널로 변환 할 때만 발생합니다. 나는 '큰'파일을 재 시도하고 DataFrame으로 유지했습니다. 문제 없습니다. Panel 로의 전환은 가해자 인 것 같습니다. 이것이 버그인지 궁금합니다. – pynoob

1

DataFrame에서 Panel 코드로 일부 버그가 수정되었습니다. 최신 팬더 버전 (곧 출시 될 0.10 버전)을 사용해보고 문제가 지속될 경우 알려주십시오.

+0

윌 웨스. 감사. 0.8.1에 있다고 생각하세요 - 지금 0.10으로 업그레이드하십시오. – pynoob

관련 문제