복붙노트

[PYTHON] 어떻게하면 거대한 CSV 파일을 부분적으로 읽을 수 있습니까?

PYTHON

어떻게하면 거대한 CSV 파일을 부분적으로 읽을 수 있습니까?

나는 매우 큰 CSV 파일을 가지고있어서 그것들을 모두 메모리에 읽어 들일 수는 없다. 나는 그저 몇 줄을 읽고 처리하기를 원한다. 그래서 나는이 작업을 처리 할 수있는 팬더에서 기본적인 파이썬이이 것을 잘 처리 할 수있는 함수를 찾고 있습니다.

with open('abc.csv') as f:
    line = f.readline()
    # pass until it reaches a particular line number....

그러나 팬더에서 이렇게하면 항상 첫 번째 줄을 읽습니다.

datainput1 = pd.read_csv('matrix.txt',sep=',', header = None, nrows = 1 )
datainput2 = pd.read_csv('matrix.txt',sep=',', header = None, nrows = 1 )

팬더에서이 작업을 처리하는 좀 더 쉬운 방법을 찾고 있습니다. 예를 들어, 1000에서 2000까지의 행을 읽으려는 경우 어떻게해야합니까?

데이터를 데이터 프레임으로 읽고 싶기 때문에 팬더를 사용하고 싶습니다.

해결법

  1. ==============================

    1.chunksize 사용 :

    chunksize 사용 :

    for df in pd.read_csv('matrix.txt',sep=',', header = None, chunksize=1):
        #do something
    

    두 번째 부분에 대답하려면 다음을 수행하십시오.

    df = pd.read_csv('matrix.txt',sep=',', header = None, skiprows=1000, chunksize=1000)
    

    이렇게하면 처음 1000 개 행을 건너 뛴 다음 1000-2000 행을 제공하는 다음 1000 개 행을 읽습니다. 끝점을 포함해야하는지 여부는 불분명하지만 원하는 것을 얻으려면 숫자를 바이올린으로 입력 할 수 있습니다.

  2. ==============================

    2.EdChums 외에도 nrows 인수가 유용 할 때 대답하면 가져올 행의 수를 정의합니다. 따라서 iterator를 얻지는 않지만 오히려 크기의 전체 파일 중 일부만 가져올 수 있습니다. 그것은 역시 무효화와 함께 작동합니다.

    EdChums 외에도 nrows 인수가 유용 할 때 대답하면 가져올 행의 수를 정의합니다. 따라서 iterator를 얻지는 않지만 오히려 크기의 전체 파일 중 일부만 가져올 수 있습니다. 그것은 역시 무효화와 함께 작동합니다.

    df = pd.read_csv('matrix.txt',sep=',', header = None, skiprows= 1000, nrows=1000)
    
  3. from https://stackoverflow.com/questions/29334463/how-can-i-partially-read-a-huge-csv-file by cc-by-sa and MIT license