pandas - 名称未在 Python for 循环中定义
问题描述
我有一个数据框“total_data”,我想使用 .query() 方法和“for”循环对其进行过滤并分成几个子集。我将每个子集的条件写成字符串。这是我的代码:
subsets = ['subset1', 'subset2']
subset1_query = 'Column1 in @list1, Column2 in @list2'
subset2_query = 'Column3 in @list3, Column4 in @list4'
for subset in subsets:
query_sub = subset+'_query'
total_data.query(query_sub).to_excel('data.xlsx', sheet_name = subset)
但我收到一个错误:未定义名称“subset1_query”。 当我在循环之外使用 total_data.query(subset1_query) 时,我得到了一个正确的数据框。为什么我会收到此错误?
解决方案
我认为你想要做的是这里:
subsets = ['subset1', 'subset2']
subset1_query = 'Column1 in @list1, Column2 in @list2'
subset2_query = 'Column3 in @list3, Column4 in @list4'
for subset in subsets:
query_sub = subset+'_query'
total_data.query(**eval**(query_sub)).to_excel('data.xlsx', sheet_name = subset)
但是对我来说问题是,你为什么不把两个subset_1|2_query 对象放在列表中,即
subsets = [('subset1', 'Column1 in @list1, Column2 in @list2'), ('subset2', 'Column3 in @list3, Column4 in @list4')]
for subset_name, query_sub in subsets:
total_data.query(query_sub).to_excel('data.xlsx', sheet_name = subset_name)
那不是更直接一点吗?
编辑:我在第二个示例中修复了一些内容以更适合您的问题。起初我忽略了一些事情。
推荐阅读
- r - 如何在 R 中查找和绘制 n-gram 的频率?
- python - 尝试优雅地使用“或”运算符
- android - 无法为扩展“firebaseAppDistribution”设置未知属性“artifactType”
- reactjs - 期望一个字符串(用于内置组件)或一个类/函数(用于复合组件)但得到:在 React 中未定义但没有导入
- python - 具体子类的实例是抽象类的实例吗?
- php - 小时数可用的 PHP 数组未标记正确的日期
- c# - 从 SQL 表更改网页网格中日期时间显示格式的最佳方法?C#
- python - 将授权标头发布到特定 IP/端口的 Python 脚本
- python - McAfee Endpoint 安全警报“系统资源不足”在 Python 中使用 cx_Oracle:
- wordpress - 使用 wordpress 上的按钮控制 Node-Red,HTTP Get