如何使用 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 循环