将熊猫数据更新到现有的csv

时间:2019-12-04 10:59:13

标签: python-3.x pandas azure-databricks

我有一个从熊猫数据帧创建的csv。

但是,一旦我添加它,它就会抛出:OSError:[Errno 95]操作不受支持

for single_date in [d for d in (start_date + timedelta(n) for n in range(day_count)) if d <= end_date]:
  currentDate = datetime.strftime(single_date,"%Y-%m-%d")
  #Send request for one day to the API and store it in a daily csv file
  response = requests.get(endpoint+f"?startDate={currentDate}&endDate={currentDate}",headers=headers)
  rawData = pd.read_csv(io.StringIO(response.content.decode('utf-8')))


  outFileName = 'test1.csv'
  outdir = '/dbfs/mnt/project/test2/'
  if not os.path.exists(outdir):
    os.mkdir(outdir)

  fullname = os.path.join(outdir, outFileName)    


  pdf = pd.DataFrame(rawData)
  if not os.path.isfile(fullname):
    pdf.to_csv(fullname, header=True, index=False)
  else: # else it exists so append without writing the header
    with open(fullname, 'a') as f: #This part gives error... If i write 'w' as mode, its overwriting and working fine.
      pdf.to_csv(f, header=False, index=False, mode='a')

3 个答案:

答案 0 :(得分:0)

我猜是因为您以追加模式打开了文件,然后在对mode = 'a'的调用中再次传递了to_csv。您可以尝试简单地做到这一点吗?

pdf = pd.DataFrame(rawData)
if not os.path.isfile(fullname):
    pdf.to_csv(fullname, header=True, index=False)
else: # else it exists so append without writing the header
    pdf.to_csv(fullname, header=False, index=False, mode='a')

答案 1 :(得分:0)

添加后效果不佳。因此,我创建了Parque文件,然后将其读取为数据框。

答案 2 :(得分:0)

我遇到了类似的问题,根本原因是 Databrick Runtime> 6 不支持对DBFS中存在的文件进行追加或随机写入操作。在我将运行时从 5.5升级到6 之前,这对我来说一直很好,因为他们建议这样做,因为那时他们不再支持运行时<6。

我遵循了这种解决方法,以代码形式读取文件,附加了数据并覆盖了它。