【问题标题】:How can I create new dataframes using for looping and the method query to filter my dataframe that already exist?如何使用 for 循环和方法查询创建新的数据框来过滤我已经存在的数据框?
【发布时间】:2021-06-30 06:46:15
【问题描述】:

我想使用方法查询和 for 循环创建新的数据帧,但是当我尝试实现这一点时 出现此错误UndefinedVariableError: name 'i' is not defined

我尝试使用此代码:

for sigla in sigla_estados:
    nome_estado_df = 'dataset_' + sigla 
    for i in range(28):
        nome_estado_df = consumo_alimentar.query("UF == @lista_estados[i]")

我的列表 (lista_estados) 有 27 个项目,所以我尝试使用 range 遍历所有项目。

我不知道是什么问题,我是初学者。

【问题讨论】:

  • 它们都需要是单独的数据框,还是单个数据框的每一行都可以是列表中的不同项目?
  • 对于所写的问题,请尝试f"UF == {lista_estados[i]}"。但我会考虑是否有办法将所有数据存储在一个数据框中,特别是如果列表中的所有项目都具有相同的列
  • 也代替range(28)range(len(lista_estados))
  • i 可能不会在该字符串内进行评估。

标签: python pandas list dataframe for-loop


【解决方案1】:

从您的代码中,我想您想创建多个数据框,每个数据框都包含 consumo_alimentar 中适用于一个特定国家/地区的行(列 UF 带有名称与 lista_estados 中的国家/地区名称相匹配)。

我还假设您有一个数组 (sigla_estados),其中包含 lista_estados 中国家/地区的国家代码,并且长度与 lista_estados 相同strong> 并以这样一种方式排列,即 lista_estados[x] 的国家代码对于所有 x 都等于 sigla_estados[x]

如果我的假设是正确的,这段代码可以工作:

for i in range(len(lista_estados)):
    estado = lista_estados[i]
    sigla = sigla_estados[i]
    mask = consumo_alimentar['UF'] == estado
    nome_estado_df[sigla] = consumo_alimentar[mask]

使用该代码,您将获得一组数据框,我认为这些数据框或多或少是您想要的。如果你想使用查询方法,这也应该工作:

for i in range(len(lista_estados)):
    estado = lista_estados[i]
    sigla = sigla_estados[i]
    query_str = "UF == @estado"
    nome_estado_df[sigla] = consumo_alimentar.query(query_str)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多