【问题标题】:Creating pandas dataframes within a loop在循环中创建熊猫数据框
【发布时间】:2015-09-12 07:52:12
【问题描述】:

我正在尝试根据文件和数据框名称列表创建大约 120 个数据框。问题是循环工作后,数据帧不会持续存在。我的代码可以在下面找到。有谁知道为什么这可能不起作用?

for fname, dfname in zip(CSV_files, DF_names):
    filepath = find(fname, path)
    dfname = pd.DataFrame.from_csv(filepath)

【问题讨论】:

  • 我无法评论为什么dfname 没有持久化,但你能测试一下在循环外声明一个列表并在每次迭代时附加创建的df
  • 如果我在循环中创建 df 后添加 print dfname 之类的内容,则会打印 df,但不会持续存在。我不知道为什么
  • 您是否尝试过我建议的附加到列表的方法?
  • 是的,当我这样做时,列表包含所有 dfs

标签: python pandas


【解决方案1】:

这是一个 python 功能。 看这个更简单的例子:(cmets 显示输出)

 values = [1,2,3]
 for v in values:
     print v,
 # 1 2 3
for v in values:
    v = 4
    print v, 
# 4 4 4
print values
# [1, 2, 3]
# the values have not been modified

还请看这个 SO 问题和答案:Modifying a list iterator in Python not allowed?

评论中建议的解决方案应该会更好,因为您不修改迭代器。如果您需要一个名称来访问数据框,您还可以使用字典:

dfs = {}
for fname, dfname in zip(CSV_files, DF_names):
    filepath = find(fname, path)
    df = pd.DataFrame.from_csv(filepath)
    dfs[dfname] = df
print dfs[DF_names[1]]

【讨论】:

  • 但是我怎样才能用列表制作所有单独的数据框呢?为了查询/火花目的,它们都需要分开
  • 所有 df 都是列表的不同元素。如果您需要更多的“人类”名称,您可以使用字典(请参阅我编辑的答案)
猜你喜欢
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 2017-02-13
  • 2019-04-20
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多