python - 在 Python 中记录可重复的操作
问题描述
在 Python 3.6 中工作,我想记录可重复的操作,而不需要从函数代码中对记录器进行过多的调用。最好有一个自动选项,以便在函数内的每一行代码评估之后吐出一个日志。那可能吗?
以下是过滤数据之类的最小可重现示例:
# Import libraries
import pandas as pd
import numpy as np
import logging
# Set up the logger and a dummy data frame
logger = logging.getLogger()
logger.setLevel(logging.INFO)
dummy_df = pd.DataFrame({
'col_A': np.arange(1, 1000, 1),
'col_B': np.arange(1001, 2000, 1)
})
# Subset rows of the dataframe
logging.info("There are {} rows remaining".format(dummy_df.shape[0]))
# Removing values A below 15
dummy_df = dummy_df.loc[dummy_df['col_A'] > 15]
logging.info("There are {} rows remaining".format(dummy_df.shape[0]))
# Removing values B below 1500 and above 1600
dummy_df = dummy_df.loc[(dummy_df['col_B'] > 1500) & (dummy_df['col_B'] < 1600)]
logging.info("There are {} rows remaining".format(dummy_df.shape[0]))
问题是我必须为基本相同的操作编写对记录器的可重复调用。
解决方案
假设条件是如此不同,以至于不可能有一个过滤器功能随着过滤器条件的变化而变化。
# Import libraries
import pandas as pd
import numpy as np
import logging
# Set up the logger and a dummy data frame
logger = logging.getLogger()
logger.setLevel(logging.INFO)
dummy_df = pd.DataFrame({
'col_A': np.arange(1, 1000, 1),
'col_B': np.arange(1001, 2000, 1)
})
def filter1(df):
return df.loc[df['col_A'] > 15]
def filter2(df):
return df.loc[(df['col_B'] > 1500) & (df['col_B'] < 1600)]
filters = (filter1, filter2)
logging.info("There are {} rows remaining".format(dummy_df.shape[0]))
for my_filter in filters:
dummy_df = my_filter(dummy_df)
logging.info("There are {} rows remaining".format(dummy_df.shape[0]))
您可以根据需要添加任意数量的过滤器
推荐阅读
- r - quanteda - 停用词在法语中不起作用
- c++ - SDL2 无法打开任何 BMP 文件
- google-analytics - 是否可以仅在谷歌分析上查看/绘制非交互事件?
- typescript - 使用带有 Semantic UI React 的 styled-components 创建的组件不保留 SUIR 组件的 props 类型信息
- node.js - 如何在 Nodejs 中导出变量
- winforms - Powershell Listview:在 6 个不同的列中添加 6 个项目列表
- wpf - Visual Studio Intellisense 如何知道如何为 WPF XAML 中的画笔类型属性列出预定义画笔?
- php - 无类嵌套的简单 html-dom 列表排序
- git - gitbash 上未跟踪的文件
- javascript - 如何在博客中自动将所有下载链接重定向到计时器页面?