首页 文章

如何将pandas数据添加到现有的csv文件?

提问于
浏览
119

我想知道是否可以使用pandas to_csv() 函数将数据帧添加到现有的csv文件中 . csv文件与加载的数据具有相同的结构 .

6 回答

  • 317

    您可以在pandas to_csv函数中指定python写入模式 . 如果追加它是'a' .

    在你的情况下:

    df.to_csv('my_csv.csv', mode='a', header=False)
    

    默认模式为“w” .

  • 174

    您可以在追加模式下通过opening the file附加到csv:

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

    如果这是你的csv, foo.csv

    ,A,B,C
    0,1,2,3
    1,4,5,6
    

    如果你读了然后追加,例如, df + 6

    In [1]: df = pd.read_csv('foo.csv', index_col=0)
    
    In [2]: df
    Out[2]:
       A  B  C
    0  1  2  3
    1  4  5  6
    
    In [3]: df + 6
    Out[3]:
        A   B   C
    0   7   8   9
    1  10  11  12
    
    In [4]: with open('foo.csv', 'a') as f:
                 (df + 6).to_csv(f, header=False)
    

    foo.csv 成为:

    ,A,B,C
    0,1,2,3
    1,4,5,6
    0,7,8,9
    1,10,11,12
    
  • 14

    我使用一个小帮助函数与一些 Headers 检查安全措施来处理它:

    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)
    
  • 2

    派对有点晚,但如果您多次打开和关闭文件,或者记录数据,统计数据等,您也可以使用上下文管理器 .

    from contextlib import contextmanager
    import pandas as pd
    @contextmanager
    def open_file(path, mode):
         file_to=open(path,mode)
         yield file_to
         file_to.close()
    
    
    ##later
    saved_df=pd.DataFrame(data)
    with open_file('yourcsv.csv','r') as infile:
          saved_df.to_csv('yourcsv.csv',mode='a',header=False)`
    
  • 0

    最初从pyspark数据帧开始 - 我得到类型转换错误(当转换为pandas df然后附加到csv)给定我的pyspark数据帧中的模式/列类型

    通过强制每个df中的所有列都是字符串类型然后将其附加到csv来解决问题,如下所示:

    with open('testAppend.csv', 'a') as f:
        df2.toPandas().astype(str).to_csv(f, header=False)
    
  • 0
    with open(filename, 'a') as f:
        df.to_csv(f, header=f.tell()==0)
    
    • 除非存在否则创建文件,否则追加

    • 如果正在创建文件,则添加 Headers ,否则跳过它

相关问题