Python으로 대용량 CSV 읽기 및 처리

g. 험프 킨

이전에 질문 한이 질문 과 정신적으로 유사한 질문이 있습니다. 그럼에도 불구하고 적절한 해결책을 찾을 수없는 것 같습니다.

입력 : CSV 데이터가 있습니다.

id,prescriber_last_name,prescriber_first_name,drug_name,drug_cost
1000000001,Smith,James,AMBIEN,100
1000000002,Garcia,Maria,AMBIEN,200
1000000003,Johnson,James,CHLORPROMAZINE,1000
1000000004,Rodriguez,Maria,CHLORPROMAZINE,2000
1000000005,Smith,David,BENZTROPINE MESYLATE,1500

산출물 : 이것에서 나는 단순히 각 약물, 모든 처방전에 대해 합산 된 총 비용을 산출하고 고유 한 처방 자의 수를 가져와야합니다.

drug_name,num_prescriber,total_cost
AMBIEN,2,300.0
CHLORPROMAZINE,2,3000.0
BENZTROPINE MESYLATE,1,1500.0

나는 이것을 파이썬으로 꽤 쉽게 할 수 있었다. 그러나 훨씬 더 큰 (1GB) 입력으로 코드를 실행하려고하면 코드가 적절한 시간 내에 종료되지 않습니다.

import sys, csv

def duplicate_id(id, id_list):
    if id in id_list:
        return True
    else:
        return False

def write_file(d, output):
    path = output
    # path = './output/top_cost_drug.txt'
    with open(path, 'w', newline='') as csvfile:
        fieldnames = ['drug_name', 'num_prescriber', 'total_cost']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        for key, value in d.items():
            print(key, value)
            writer.writerow({'drug_name': key, 'num_prescriber': len(value[0]), 'total_cost': sum(value[1])})

def read_file(data):
    # TODO: https://codereview.stackexchange.com/questions/88885/efficiently-filter-a-large-100gb-csv-file-v3
    drug_info = {}
    with open(data) as csvfile:
        readCSV = csv.reader(csvfile, delimiter=',')
        next(readCSV)
        for row in readCSV:
            prescriber_id = row[0]
            prescribed_drug = row[3]
            prescribed_drug_cost = float(row[4])

            if prescribed_drug not in drug_info:
                drug_info[prescribed_drug] = ([prescriber_id], [prescribed_drug_cost])
            else:
                if not duplicate_id(prescriber_id, drug_info[prescribed_drug][0]):
                    drug_info[prescribed_drug][0].append(prescriber_id)
                    drug_info[prescribed_drug][1].append(prescribed_drug_cost)
                else:
                    drug_info[prescribed_drug][1].append(prescribed_drug_cost)
    return(drug_info)

def main():
    data = sys.argv[1]
    output = sys.argv[2]
    drug_info = read_file(data)
    write_file(drug_info, output)

if __name__ == "__main__":
    main()

나는 더 큰 입력을 처리하기 위해 이것을 리팩토링하는 방법을 알아내는 데 어려움을 겪고 있으며 누군가가이 문제를 해결하는 방법에 대한 몇 가지 제안을 할 수 있기를 바랍니다.

Gowdhaman008

팬더를 사용할 수 있다면 다음을 시도하십시오. Pandas는 파일을 읽고 데이터 프레임에 저장합니다. 반복자를 사용하는 수동 파일 처리보다 훨씬 빠릅니다.

import pandas as pd


df = pd.read_csv('sample_data.txt')

columns = ['id','drug_name','drug_cost']


df1 = df[columns]
gd = df1.groupby('drug_name')
cnt= gd.count()
s=gd.sum()

out = s.join(cnt,lsuffix='x')
out['total_cost']=out['drug_costx']
out['num_prescriber']=out['drug_cost']
fout = out[['num_prescriber','total_cost']]

fout.to_csv('out_data.csv')

다음 출력이 표시됩니다.

drug_name,num_prescriber,total_cost
AMBIEN,2,300
BENZTROPINE MESYLATE,1,1500
CHLORPROMAZINE,2,3000

도움이 되었기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

대용량 CSV 파일 처리를 처리하거나 대용량 CSV 파일을 청크로 읽는 방법

Python 및 멀티 스레딩을 사용하여 대용량 CSV 파일 처리

Python 다중 처리 : 대용량 파일 읽기 및 가져온 사전 업데이트

PowerShell로 대용량 파일 읽기 및 캐리지 리턴 삭제

Unity : 대용량 CSV 파일 읽기 및 업데이트

대용량 CSV 파일 처리 및 고 루틴 제한

python 및 pandas로 대용량 파일 처리

Python Pandas-주석 처리 된 헤더 행으로 CSV 읽기

islice 및 다중 처리를 사용하여 일괄 적으로 큰 텍스트 파일 읽기 및 처리

Dask로 대용량 압축 CSV 파일 처리

OOP를 사용하여 효율적으로 궤적 파일 처리 및 읽기

Apache Camel 및 AMQ Artemis로 대용량 메시지 처리

Node.js는 찾기 및 헤드로 대용량 파일 디렉토리를 읽습니다.

AngularJS로 HTML 읽기 및 처리

DynamoDb를 로컬에서 실행하기위한 기본 프로비저닝 처리량 (읽기 및 쓰기 용량 단위)은 얼마입니까?

Python 읽기 디렉터리 및 CSV로 출력

Python에서 대용량 파일 동시 다운로드 및 처리

대용량 파일 읽기 및 쓰기 C ++ (메모리 과부하)

Linux C ++ 애플리케이션에서 대용량 파일 찾기 및 읽기

대용량 CSV 파일 처리

대용량 CSV 파일 폴더 처리

Linux를 사용하여 CSV를 기반으로 파일을 가변 수량 및 디렉토리로 분할

mmap 및 대용량 페이지가있는 대용량 파일을 무작위로 읽기

Python에서 다중 처리를 사용하여 여러 파일 읽기 및 읽기 값 연결

StreamingHttpResponse를 사용하여 대용량 CSV 파일 스트리밍 및 다운로드

Pandas를 사용하여 충돌없이 대용량 CSV 파일을 효율적으로 읽기

Python 다중 처리 및 대기열

읽기 및 쓰기 닫기에 대한 예외 처리

Cassandra에서 Python 데이터 프레임으로 대용량 데이터 읽기 (메모리 오류)

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관