Using pandas to efficiently read in a large CSV file without crashing

17,969

You should consider using the chunksize parameter in read_csv when reading in your dataframe, because it returns a TextFileReader object you can then pass to pd.concat to concatenate your chunks.

chunksize = 100000
tfr = pd.read_csv('./movielens/ratings.csv', chunksize=chunksize, iterator=True)
df = pd.concat(tfr, ignore_index=True)

If you just want to process each chunk individually, use,

chunksize = 20000
for chunk in pd.read_csv('./movielens/ratings.csv', 
                         chunksize=chunksize, 
                         iterator=True):
    do_something_with_chunk(chunk)
Share:
17,969
Developer
Author by

Developer

Updated on June 30, 2022

Comments

  • Developer
    Developer almost 2 years

    I am trying to read a .csv file called ratings.csv from http://grouplens.org/datasets/movielens/20m/ the file is 533.4MB in my computer.

    This is what am writing in jupyter notebook

    import pandas as pd
    ratings = pd.read_cv('./movielens/ratings.csv', sep=',')
    

    The problem from here is the kernel would break or die and ask me to restart and its keeps repeating the same. There is no any error. Please can you suggest any alternative of solving this, it is as if my computer has no capability of running this.

    This works but it keeps rewriting

    chunksize = 20000
    for ratings in pd.read_csv('./movielens/ratings.csv', chunksize=chunksize):
    ratings.append(ratings)
    ratings.head()
    

    Only the last chunk is written others are written-off

  • Developer
    Developer over 6 years
    I have tried this though its not crashing but the kernel run for more than 40 mins without terminating.... and I just cancelled it. How long should I expect for 20M records to be read?
  • cs95
    cs95 over 6 years
    @Developer Increased chunksize and set iterator=True. Try it again.
  • Developer
    Developer over 6 years
    Can you please assist with that edits. It is fast but I have failed to append data every time it is written @cOLDsLEEP
  • Developer
    Developer over 6 years
    Still there is an issue now its only take the first chunk, other chunks are not recorded, there are 20M data but that method will only keep 20K data, only the first chunk @cOLDsLEEP
  • cs95
    cs95 over 6 years
    @Developer I would refer you to this: stackoverflow.com/questions/33642951/…
  • cs95
    cs95 over 6 years