【问题标题】:Python saving data to file/global variable in a loopPython在循环中将数据保存到文件/全局变量
【发布时间】:2019-03-01 17:16:48
【问题描述】:

我有两个用于调用预测函数的 for 循环。该函数返回预测值,我想将其写入文件或数据框中,以便我可以保存所有预测并在循环范围之外访问它们。我有点卡在这里。让我举例说明。

 for country in df['country'].unique():
      for channel in df['channel'].unique():
          output = pd.DataFrame(columns=['date', 'country', 
                                          'channel_id','value'])
          x = df[df['country']==country & df['channel']==channel]
          pred = forecast(df)
          output = output.append(pred)
          output.to_csv('forecast.csv')

这是我想做的,但问题是,很明显,每次迭代后数据都会丢失。请提出保存方法。

【问题讨论】:

  • 只需将output.to_csv('forecast.csv') 拉出for 循环即可。但是,即使文件不断被覆盖,您将在每次写入时按顺序添加更多数据,因此数据最终应该都在那里
  • 我试过了。那是一个空文件。显然是因为如果我把它拿出来,它就会超出范围。真的不确定
  • 它不能超出您所展示的范围。但是,我们也看不到您如何初始化 output
  • 刚刚编辑并添加了输出初始化,如果我在循环之前初始化输出会起作用吗? @roganjosh
  • 哦,现在问题很清楚了。您需要将output = pd.DataFrame(columns=['date', 'country', 'channel_id','value']) 拉出两个for 循环;您不断践踏 df 并在每次迭代时重置它。在循环之前定义。

标签: python pandas file loops dataframe


【解决方案1】:

要通过制表符分隔,您可以使用 to_csv 的 sep 参数:

output.to_csv(file_name, sep='\t')

要使用特定编码(例如“utf-8”),请使用 encoding 参数:

output.to_csv(file_name, sep='\t', encoding='utf-8')

【讨论】:

  • 哪里有提到分隔符? OP 说他们正在丢失数据,而不是他们不知道如何指定分隔符。
最近更新 更多