- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近了解了 np.select
操作,并决定创建一个类来试验它,并进一步了解 OOP。
这里是我的类的定义,后面是一个示例(该类使用开头定义的 translate
函数):
def translate(text, conversion_dict, before = None):
if not text: return text
before = before or str.lower
t = before(text)
for key, value in conversion_dict.items():
t = t.replace(key, value)
return t
class Conditions:
def __init__(self, base_conditions, composed_conditions, groups, default_group):
self.base_conditions = base_conditions
self.composed_conditions = composed_conditions
self.groups = groups
self.default_group = default_group
self.readable_conditions = [translate(c, self.base_conditions) for c in self.composed_conditions]
self.ok_conditions = []
def run_condition(self, condition, df_name):
return eval(condition.replace("(","("+str(df_name)+"."))
def run_conditions(self, df_name):
return [self.run_condition(c, df_name) for c in self.readable_conditions]
示例
首先,我们创建一个简单的 DataFrame 来使用:
import pandas as pd
import numpy as np
example = {"lev1" : [-1, -1, -1, 1, 0 , -1, 0 , 3],
"lev2" : [-1, 0 , 1 , 5 , 0 , 7 , 8 , 6]}
ex_df = pd.DataFrame.from_dict(example)
print(ex_df)
lev1 lev2
0 -1 -1
1 -1 0
2 -1 1
3 1 5
4 0 0
5 -1 7
6 0 8
7 3 6
接下来,我们创建一个类的新实例,在其中传递条件和组:
mycond = Conditions({"(m1)" : "(lev1 < 0)",
"(m2)" : "(lev2 > 2)",
"(m3)" : "(lev1 == 0)"},
["(m1)", "(m2) & (m3)", "(m2)"],
['A', 'B', 'C'],
999)
最后,我们在 ex_df
DataFrame 上使用 np.select
操作并打印结果:
ex_df['MATCH'] = np.select(condlist = mycond.run_conditions("ex_df"),
choicelist = mycond.groups,
default = mycond.default_group)
print(ex_df)
lev1 lev2 MATCH
0 -1 -1 A
1 -1 0 A
2 -1 1 A
3 1 5 C
4 0 0 999
5 -1 7 A
6 0 8 B
7 3 6 C
正如您所看到的,除了一个异常(exception)之外,一切都运行良好。
当我尝试从单独的文件(conditions.py
,其中还包含翻译函数
)导入我的类时,它不再起作用。以下是我的文件夹/文件的组织方式:
├── classes
│ ├── __init__.py
│ └── conditions.py
└── test-notebook.ipynb
在我的 test-notebook.ipynb
中,我以通常的方式导入我的类(有效):
from classes.conditions import *
然后,在创建我的 DataFrame 后,我创建了我的类的一个新实例(也可以工作)。最后,当运行 np.select
操作时,会引发以下 NameError:name 'ex_df' 未定义
。
我不知道为什么会输出错误以及如何修复它。我正在寻找为什么和如何的答案。如果需要的话,这是错误的回溯:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-7-1d4b3ba4a3c0> in <module>
----> 1 ex_df['MATCH'] = np.select(condlist = mycond.run_conditions("ex_df"),
2 choicelist = mycond.groups,
3 default = mycond.default_group)
4 print(ex_df)
~/Projects/test/notebooks/classes/conditions.py in run_conditions(self, df_name)
20
21 def run_conditions(self, df_name):
---> 22 return [self.run_condition(c, df_name) for c in self.readable_conditions]
~/Projects/test/notebooks/classes/conditions.py in <listcomp>(.0)
20
21 def run_conditions(self, df_name):
---> 22 return [self.run_condition(c, df_name) for c in self.readable_conditions]
~/Projects/test/notebooks/classes/conditions.py in run_condition(self, condition, df_name)
17
18 def run_condition(self, condition, df_name):
---> 19 return eval(condition.replace("(","("+str(df_name)+"."))
20
21 def run_conditions(self, df_name):
~/Projects/test/notebooks/classes/conditions.py in <module>
NameError: name 'ex_df' is not defined
最佳答案
在您的上下文中,变量ex_df
无法作为全局或局部变量访问,即函数run_conditions
知道名称“ex_df”但不知道它是什么。
您需要传递对 DataFrame 的引用而不是其名称:
ex_df['MATCH'] = np.select(condlist = mycond.run_conditions(ex_df),
choicelist = mycond.groups,
default = mycond.default_group)
然后更改 run_condition
的定义以接受 DataFrame 而不是变量名称:
def run_condition(self, condition, df):
return eval(condition.replace("(","(df."))
def run_conditions(self, df):
return [self.run_condition(c, df) for c in self.readable_conditions]
说明:在函数run_condition
的上下文中,变量名称为df
。没有“ex_df” - 这就是你在其他地方调用它的方式。此时运行 eval(),解释器通过该名称知道 df,它是函数的参数。
关于python - 导入类时NameError DataFrame未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740110/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!