python - 如何使用 OOP 编程修复方法中的错误
问题描述
我有下面的代码,其中该get()
方法旨在获取我的数据框中的所有值(这是一个充满数据的 excel 表),其中该 excel 单元格的内容以文本开头"AML"
:
class Settings3:
def __init__(self,path):
self.path = path
self.data = self.load()
def load(self):
if self.path.endswith('.xlsx'):
print ("This is a valid file path")
else:
raise Exception("This is not a valid file path")
#LOAD WORKBOOK
self.workbook = load_workbook(filename=self.path)
# CREATE THE DICTIONARY TO HOLD DATAFRAMES\n",
self.data_dict = {}
# GO THROUGH SHEETS, STORING SHEETNAME AND DATAFRAME\n",
for sheet in self.workbook.sheetnames:
self.data_dict[sheet] = pd.read_excel(self.path, sheet_name=sheet)
return self.data_dict
def get(self,value):
if value == None:
return self.data
elif value in self.workbook.sheetnames:
df = pd.read_excel(self.path, value)
return df
elif value == "AML":
for sheet_name in self.workbook.sheetnames:
df = pd.read_excel(self.path,sheet_name)
if "RULE_ID" in df.columns:
print(df.loc[df["RULE_ID"] == value])
目前,当我尝试 get 方法时s3.get("AML")
(s3
用作该settings3
对象的实例,我收到以下值作为输出
Empty DataFrame Columns: [RULE_ID, PARAM_ID, ROLE_ID, PARAM_NAME, ATTRIBUTE_NAME, ATTRIBUTE_VALUE, SQL] Index: []
Empty DataFrame Columns: [REGION_CD, RULE_ID, PARAM_ID, ROLE_ID, ATTRIBUTE_NAME, ATTRIBUTE_VALUE, TENANT_CD, SQL] Index: []
Empty DataFrame Columns: [REGION_CD, RULE_ID, PARAM_ID, ROLE_ID, PARAM_NAME, THRESHOLD_NAME, THRESHOLD_VALUE, TENANT_ID, SQL] Index: []
Empty DataFrame Columns: [REGION_CD, RULE_ID, PARAM_ID, PARAM_NAME, FROM_VALUE, SCORE, TENANT_ID, SQL] Index: []
Empty DataFrame Columns: [REGION_CD, RULE_ID, PARAM_ID, ROLE_ID, PARAM_NAME, THRESHOLD_NAME, POPULATION_GROUP_ID, THRESHOLD_VALUE, TENANT_ID, SQL] Index: []
Empty DataFrame Columns: [REGION_CD, RULE_ID, PARAM_ID, PARAM_NAME, POPULATION_GROUP_ID, FROM_VALUE, SCORE, TENANT_ID, SQL] Index: []
Empty DataFrame Columns: [RULE_ID, PARAM_ID, PARAM_NAME, ROLE_ID, ENTITY_KEY, THRESHOLD_NAME, THRESHOLD_VALUE, TENANT_ID, SQL] Index: []
Empty DataFrame Columns: [RULE_ID, PARAM_ID, PARAM_NAME, ENTITY_KEY, FROM_VALUE, SCORE, TENANT_ID, SQL] Index: []
应返回的值应如下所示(来自实际的 excel 表):
0 AML-ADR-ADR-ALL-A-M06-CUS
1 AML-ADR-ADR-ALL-A-M06-CUS
2 AML-ADR-ADR-ALL-A-M06-CUS
3 AML-ADR-ADR-ALL-A-M06-CUS
任何人都可以帮助解决为什么会这样吗?这一定是我的get()
代码中的一个小错误。谢谢 :)
解决方案
您说您想获取以文本“AML”开头的所有值,但您的代码测试是否相等:
df["RULE_ID"] == value
这只会匹配包含确切“AML”字符串的单元格,而不是“AML_hello”或类似的任何内容。现在在 python 中,你有了startswith
string 方法,它在这里会派上用场,但不幸的是,这不是 Series 上的矢量化操作。
所以诀窍是编写一个执行您想要的操作的函数:
f = lambda x: str(x).startswith('AML')
并将其应用于系列(替换代码的最后一行):
print(df.loc[df["RULE_ID"].apply(f)])
例如,转换为字符串str()
只是为了避免在整数上崩溃。
推荐阅读
- python - 创建一个检查日期是否有效的函数
- python - 如何向 matplotlib 注释添加附加文本
- c# - 为什么 nCalc 不按预期评估长值
- powershell - Powershell Compare-Object 修改侧指示器
- excel - 将 xlA1 公式转换为 xlR1C1 会出错
- c++ - 特化模板内的模板别名
- google-apps-script - 根据复选框值或布尔值将范围复制到不同的工作表
- package - package.d 遇到问题
- reactjs - 如何使用量角器获得快速消失的吐司元素
- c# - Dapper'需要一个无参数的默认构造函数或一个匹配的签名'