【问题标题】:Save dataframes to multiple CSVs retaining dataframe name将数据框保存到多个 CSV,保留数据框名称
【发布时间】:2021-05-16 04:22:31
【问题描述】:

如何在通用代码中将多个数据框导出到具有相同标题的 CSV?

我试过了:

dframes_list = [economy, finance, language]

for i, df in enumerate(dframes_list, 1):
    filename_attempt1 = "{}.csv".format(i)
    filename_attempt2= f"{i}.csv"
    df.to_save(filename_attempt2)

预期输出:

file saved: "economy.csv"
file saved: "finance.csv"
file saved: "language.csv"

【问题讨论】:

  • dframes_list = [economy, finance, language]是如何生成的?

标签: python python-3.x pandas for-loop


【解决方案1】:

我认为在python中is strongly not recommended创建字符串变量,因为那时生成字符串不是trivial

那么最好为字符串中的名称创建另一个列表并使用zip

dframes_list = [economy, finance, language]
names = ['economy','finance','language']
for i, df in zip(names, dframes_list):
    filename_attempt1 = "df_{}.csv".format(i)

另一个想法是创建 DataFrames 的字典:

dframes_dict = {'economy': economy, 'finance': finance, 'language': language}
for i, df in dframes_dict.items():
    filename_attempt1 = "df_{}.csv".format(i)

如果需要使用DataFrames 的字典,请使用:

 for k, v in dframes_dict.items():

     v = v.set_index('date')
     #another code for processing each DataFrame

     dframes_dict[k] = v

【讨论】:

  • 谢谢。如何更新数据框或至少更新字典键?如果我在 forloop 中执行 df = df.set_index('date'),那么当我在 forloop 之外运行时没有任何变化:dframes_list['economy']
  • @asd - 稍等。
  • @asd - 添加到答案中,您需要在最后一步设置虚构的 dfs。
【解决方案2】:

如果您在笔记本上执行此操作,则可以使用 hack 搜索 locals(),并且可以使用正则表达式匹配应返回字符串值的 'dframes_list = [.+]`

'dframes_list = [economy, finance, language]'

然后您可以进行替换,直到您到达“经济、金融、语言”,此时您可以拆分并获得一个列表。

colab 版本的工作方式是这样的,

temp_local = dict(locals())
data = {}
for k,v in temp_local.items():
  try:
    if re.match('dframes_list = \[.+\]', v):
      data[k] = v
      print(k, v)
  except:
    pass

那么,

names = re.findall('\[.+\]', data[key])[0].replace('[', '').replace(']', '').split(',')

其中key 已从data 字典中识别出来。

不建议这样做。

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 2017-08-02
    • 2018-09-11
    • 2020-06-15
    • 2022-01-10
    • 2015-09-17
    • 2018-05-08
    • 2020-03-29
    相关资源
    最近更新 更多