首页 > 解决方案 > 将 XML 转换为几个数据帧时,如何以动态方式命名这些 dfs?

问题描述

我的代码在底部

“parse_xml”函数可以将 xml 文件传输到 df,例如,“df=parse_XML("example.xml", lst_level2_tags)” 可以,但是因为我想保存到几个 dfs,所以我想要像 df_first_level_tag 这样的名称, ETC

当我运行底部代码时,出现错误“f'df_{first_level_tag}'=parse_XML("example.xml", lst_level2_tags) ^ SyntaxError: can't assign to literal"

我也尝试了 .format 方法而不是 f-string 但它也没有工作至少有 30 个 dfs 要保存,我不想一个一个地做。不过,在熊猫之​​外的 Python 中,f-string 总是成功的

这里的问题是关于 f-string/format 方法还是我的代码有其他逻辑问题?

如果您需要,parse_xml 函数直接来自此链接 函数定义

for first_level_tag in first_level_tags:
    lst_level2_tags = []
    for subchild in root[0]:
        lst_level2_tags.append(subchild.tag)
    f'df_{first_level_tag}'=parse_XML("example.xml", lst_level2_tags) 

标签: pythonxmlpandasdataframef-string

解决方案


这似乎是最好将它们放入字典中的情况:

dfs = {}
for first_level_tag in first_level_tags:
    lst_level2_tags = []
    for subchild in root[0]:
        lst_level2_tags.append(subchild.tag)
    dfs[first_level_tag] = parse_XML("example.xml", lst_level2_tags)

您的 f 字符串在结构上没有任何问题,但是如果不做丑陋的事情,您通常无法在 Python 中获得动态变量名。一般来说,当你想要这样的东西时,将值存储在字典中最终会是一个更干净的解决方案。

以这种方式使用它们的一个优点是,如果你想对它们中的每一个做一些事情,你可以稍后迭代字典。例如,如果您想将它们中的每一个作为名称与标签匹配的 CSV 写入磁盘,您可以执行以下操作:

for key, df in dfs.items():
    df.to_csv(f'{key}.csv')

You can also just refer to them individually (so if there was a tag named a, you could refer to dfs['a'] to access it in your code later).


推荐阅读