【问题标题】:Panda's Write CSV - Append vs. WritePanda 的写入 CSV - 追加与写入
【发布时间】:2015-09-08 14:07:47
【问题描述】:

如果“文件名”不存在,我想使用 pd.write_csv 写入“文件名”(带有标题),否则如果存在,则附加到“文件名”。如果我只是使用命令:

     df.to_csv('filename.csv',mode = 'a',header ='column_names')

写入或追加成功,但似乎每次追加时都会写入标题。

如果文件不存在,我怎样才能只添加标题,如果文件存在,我怎样才能不添加标题?

【问题讨论】:

    标签: python csv pandas


    【解决方案1】:

    不确定 pandas 中是否有方法,但检查文件是否存在将是一种简单的方法:

    import os
    # if file does not exist write header 
    if not os.path.isfile('filename.csv'):
       df.to_csv('filename.csv', header='column_names')
    else: # else it exists so append without writing the header
       df.to_csv('filename.csv', mode='a', header=False)
    

    【讨论】:

      【解决方案2】:
      with open(filename, 'a') as f:
          df.to_csv(f, mode='a', header=f.tell()==0)
      

      第一次写入文件时会添加标题

      【讨论】:

      • 我同意这是干净的。 df.to_csv(f,mode='a', header=not f.tell()) 也可以。
      • 我们真的需要with open(filename, 'a') as f:吗?
      • @JingnanJia 由于使用了f.tell(),它返回文件读/写指针的当前位置(在这种情况下,如果已经存在内容,则使用附加模式报告非零),是的,你需要with open()
      【解决方案3】:

      在 Pandas 数据框“to_csv”函数中,如果存在 csv 文件并附加到现有文件,则使用 header=False。

      import os
      
      hdr = False  if os.path.isfile('filename.csv') else True
      df.to_csv('filename.csv', mode='a', header=hdr)
      

      【讨论】:

      • 嗨,VK,您的回答究竟带来了什么,而 Padraic(最受欢迎和接受度最高的回答)却没有?我还认为公认的答案要清楚得多。
      • 我其实很喜欢这个。它更容易阅读。
      【解决方案4】:

      上述解决方案很棒,但我有道德义务在此处包含 pathlib 解决方案:

      from pathlib import Path
      
      file_path = Path(filename)
      if file_path.exists():
         df.to_csv(file_path, header=False, mode='a')
      else:
         df.to_csv(file_path, header=True, mode='w')
      

      或者(取决于您的内联偏好):

      file_exists = file_path.exists()
      df.to_csv(file_path, header=not file_exists, mode='a' if file_exists else 'w')
      

      【讨论】:

        【解决方案5】:

        除了文件存在检查,您还可以检查非零文件大小。因为如果文件存在但文件大小为零,即没有内容的文件,则添加标题是有意义的。我发现它在一些特殊情况下很有帮助

        import os.path
        header_flag = False if (os.path.exists(fpath) and (os.path.getsize(fpath) > 0)) else True
        df.to_csv(fpath, mode='a', index=False, header=header_flag)
        

        【讨论】:

          【解决方案6】:

          如果您有 dict() 并希望 写入并附加到 CSV 文件中:

          import pandas as pd
          
          file_name = 'data.csv'
          
          my_dict = {"column_1":"Apple","column_2":"Mango"}
          
          with open(file_name, 'a') as f:
            
            df = pd.DataFrame(my_dict)
            df.to_csv(f, mode='a', header=f.tell()==0)
          

          【讨论】:

            猜你喜欢
            • 2015-11-21
            • 2014-11-23
            • 1970-01-01
            • 2015-04-22
            • 1970-01-01
            • 2017-04-02
            • 2011-12-24
            相关资源
            最近更新 更多