2016-09-30 4 views
0

텍스트 파일을 맞춤형으로 가지고 있습니다. 각 줄에서 관련 칼럼을 추출하는 파서도 있습니다. 한 번에 한 줄씩 파일을 읽고 데이터 프레임에 추가하고 싶습니다.파일을 구문 분석하고 데이터 프레임을 만드는 방법

문제는 데이터 프레임에 행을 추가하는 것이 느립니다.

어떻게해야할까요?

+0

당신은 dataframe에 추가 속도가 느린 것을 무슨 말을하게? 파일이 큰 경우 항목을 하나씩 추가하더라도 코드가 디스크에서 읽을 수있는 시간으로 제한 될 가능성이 높습니다. –

+0

@eleanora, 나는 당신에게 정식 답을 줄 수 있도록 텍스트 파일의 샘플을 정확히 같은 형식으로 게시 할 것을 권합니다. 일반적으로 단일 행을 데이터 프레임에 추가하는 것은 대단히 느립니다. – MaxU

답변

1

파일 크기가 클 경우 코드에서 디스크에서 파일을 읽는 시간이 아니라 데이터 프레임에 행을 추가하는 시간이 필요합니다. 예를 들어 SSD (읽기 처리량 ~ 400MB/s)에서 4GB 파일은 디스크에서로드하는 데 10 초가 걸립니다. HDD (~ 40MB/s)에서는 최대 100 초가 소요될 수 있습니다. 이 경우로드 속도를 높이는 한 가지 방법은 파일을 팬더에서 지원하는 형식으로 변환하고 압축 한 다음 런타임 compression 옵션 read_table()을 사용하여 데이터 프레임을 만드는 동안 즉석에서 압축을 푸는 것입니다.

  1. 변경 데이터 : 당신이 확신하는 경우

    그렇지 않으면이 정말 문제가되지 않습니다 추가 하나 하나 확인하지 않고 파일이 메모리에 버퍼가 너무 큰 경우, 당신은이 옵션을 사용할 수 있습니다 Pandas에서 지원되는 것과 일치하는 형식; 예 : CSV 파일은 당신이 갈 수있는 꽤 표준적인 옵션처럼 보입니다.

  2. 아래에 나열된 다른 생성자 중 하나를 사용하여 더 큰 배치 (예 : 1-10K 행)로 데이터 프레임을 만든 다음 병합합니다. 일정한 메모리를 사용하면서 하나씩 항목을 추가하는 것보다 빠를 수 있습니다. 당신이로 파일을 추출 할 데이터 구조에서

The other ways to construct a dataframe : 튜플에서

DataFrame.from_records 생성자, 또한 시리즈, 배열의 dicts 또는 dicts

에서 배열

DataFrame.from_dict를 기록 DataFrame.from_items (키, 값) 쌍의 시퀀스에서

pandas.read_csv, pandas.read_tablepandas.read_clipboard

+0

고맙습니다. 그 중 어떤 함수를 사용하여 입력 행의 개별 행을 행 단위로 파싱 할 수 있습니까? 전체 파일을 메모리로 읽어 들이고 파싱 한 다음 데이터 프레임을 아주 커다란 것으로부터 만들고 싶지 않습니다. – eleanora

+0

@eleanora nope; 얼마나 큰가? –

+0

약 10 억 라인. – eleanora

관련 문제