如何使用 for 循环和方法查询创建新的数据框来过滤我已经存在的数据框?

Posted

技术标签:

【中文标题】如何使用 for 循环和方法查询创建新的数据框来过滤我已经存在的数据框?【英文标题】:How can I create new dataframes using for looping and the method query to filter my dataframe that already exist? 【发布时间】: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 可能不会在该字符串内进行评估。 【参考方案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)

【讨论】:

以上是关于如何使用 for 循环和方法查询创建新的数据框来过滤我已经存在的数据框?的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何以查询的结果为条件一直循环查询下去,直到没有新的结果为止

For 循环语法:创建新的 UIView 。 . [关闭]

python如何在循环中,每次循环都创建一个新的类?

以日期时间格式查找两列数据之间的单个时间跨度,可能使用 for 循环

有没有人在 TIGRIS 中使用 append_geoid 来构建一个新的数据框来收集新的人口普查区块?

如何在 for 循环中创建多个复选框?