pandas DataFrame output end of csv

后端 未结 4 2043
死守一世寂寞
死守一世寂寞 2020-11-29 22:18

I wonder how to add new DataFrame data onto the end of an existing csv file? The to_csv doesn\'t mention such functionality.

相关标签:
4条回答
  • 2020-11-29 22:51

    You can also pass the file mode as an argument to the to_csv method

    df.to_csv(file_name, header=False, mode = 'a')
    
    0 讨论(0)
  • 2020-11-29 22:58

    A little helper function I use (based on Joe Hooper's answer) with some header checking safeguards to handle it all:

    def appendDFToCSV_void(df, csvFilePath, sep=","):
        import os
        if not os.path.isfile(csvFilePath):
            df.to_csv(csvFilePath, mode='a', index=False, sep=sep)
        elif len(df.columns) != len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns):
            raise Exception("Columns do not match!! Dataframe has " + str(len(df.columns)) + " columns. CSV file has " + str(len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns)) + " columns.")
        elif not (df.columns == pd.read_csv(csvFilePath, nrows=1, sep=sep).columns).all():
            raise Exception("Columns and column order of dataframe and csv file do not match!!")
        else:
            df.to_csv(csvFilePath, mode='a', index=False, sep=sep, header=False)
    
    0 讨论(0)
  • 2020-11-29 23:00

    You can append using to_csv by passing a file which is open in append mode:

    with open(file_name, 'a') as f:
        df.to_csv(f, header=False)
    

    Use header=None, so as not to append the column names.

    In fact, pandas has a wrapper to do this in to_csv using the mode argument (see Joe's answer):

    df.to_csv(f, mode='a', header=False)
    
    0 讨论(0)
  • 2020-11-29 23:03

    Thank to Andy, the complete solution:

    f = open(filename, 'a') # Open file as append mode
    df.to_csv(f, header = False)
    f.close()
    
    0 讨论(0)
提交回复
热议问题