【问题标题】:Name dataframe sequentially and dynamically when opening from csv - Python/Pandas从 csv 打开时按顺序动态命名数据帧 - Python/Pandas
【发布时间】:2021-08-16 20:16:52
【问题描述】:

我有一个 .csv 列表 - 它们以非常统一的方式命名,例如 BMW_year 即 BMW_60、BMW_61 ... BMW_70 ... BMW_00.. 等等。我想将它们拉入 pandas 数据框 - 我可以使用 pd.read_csv(..) 函数来完成。

但是有很多 .csvs,我希望在 -

方面做更多的事情
for i in range(70, 80):
     BMW_{i} = pd.read_csv(BMW_{i}.csv)

{i} 就像在循环迭代期间对 i 的值的引用一样。有什么办法可以实现吗?

附:我看到很多关于动态命名的问题和人们所说的 - 使用列表或字典,但我认为这不是我在这个问题中所要求的。

【问题讨论】:

  • @Ank - 因为那些问题不是这样的。这些是简单的用户输入,而不是在仅更改变量名称的“后缀”的循环情况下。我的数据框也需要更改为面板数据集,并且字典和列表非常复杂。另外,我没有看到任何人更改附加的“数字”以循环变量,这是我需要的东西。因为这会扩大规模
  • @magraf - 这也是我访问的第一个链接。但这并不包括如何以“连接”方式使用迭代器来命名变量
  • 查看this 的帖子。有同样的问题。
  • @ank - 我不想要数据框列表的主要原因之一是我需要“面板化”它们,单独使用它们并合并它们,然后进行其他操作。以这种方式跟踪索引 - 尤其是。当我需要使用不同的 csv 集运行多个这样的循环时会非常困难。

标签: python pandas dataframe dynamic naming


【解决方案1】:

还没有测试,但我会尝试类似的东西

for i in range(70, 80):
    fpath = 'BMW_%d.csv' %i
    vname = 'BMW_%d' %i
    exec("%s = pd.read_csv(%s)" % (vname, fpath))

【讨论】:

  • 否 :( 我收到错误 can't assign to operator
  • 那么你可能有一些奇怪的文件名。你可以用''保护它们。也可以用exec("BMW_%d = pd.read_csv( 'BMW_%d.csv')" % (i, i )) 直接插入整数
  • 这里的要点是您可以构建一个字符串并将其作为代码执行。因此,如果不起作用,则您的字符串不是有效代码。另请注意,某些 IDE 可能会禁止使用您的变量,因为您只在运行时定义名称。
  • 成功了 :) 谢谢。我真的希望其他想要类似解决方案的人来这里为您解答
  • 我的文件夹名称很奇怪 - 使用 os.chdir(..) 来纠正它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2021-01-19
  • 2016-08-25
  • 2023-03-20
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多