python - 如何在每个循环中遍历python pandas中的不同函数/过滤方法(或不同语句)
问题描述
我想在我的代码中循环遍历不同的过滤器方法。
这就是我的代码的样子。
import datetime
import pandas as pd
import sqlalchemy
engine = sqlalchemy.create_engine(..................)
datelist = [ datetime.date(2021, 5, 10),
datetime.date(2021, 5, 11),
datetime.date(2021, 5, 12),
datetime.date(2021, 5, 13),
datetime.date(2021, 5, 14),
datetime.date(2021, 5, 17),
datetime.date(2021, 5, 18),
datetime.date(2021, 5, 19)]
for date in datelist:
dfr = pd.read_sql(f"select * from frame1 where date = '{date}'",index_col='date',con=engine)
dfr = dfr.pivot_table(columns='line')
dfc = pd.read_sql(f"select * from frame2 where date = '{date}'",index_col='date',con=engine)
dfc = dfc.pivot_table(columns='line')
dff = dfr.append(dfc)
dff.columns = [x.lower() for x in dff.columns]
### want to for loop this part with a different statement everytime
dff.loc['test', :] = dff.loc['indicator1'].ge(0).eq(dff.loc['indicator2'])
dff = dff.loc[:,(dff.loc['indicator3']>0)]
### until here
indicator = dff.loc["indicator3",:]
dictionary = list(future_returns.to_dict().keys())
some_save_functions()
如果你看一下评论部分,我想在那里循环各种过滤方法。
以下是我想尝试的不同过滤方法的示例。
功能1
dff.loc['test', :] = dff.loc['indicator1'].ge(0).eq(dff.loc['indicator2'])
dff = dff.loc[:,(dff.loc['indicator3']>0)]
功能2
dff.loc['test', :] = dff.loc['indicator6'].ge(0).eq(dff.loc['indicator7'])
dff = dff.loc[:,(dff.loc['test']==True) & (dff.loc['indicator3']>0)]
功能3
......
......
这些陈述每次看起来都可能非常不同。
我上面有 8 个日期,我有 6 个过滤方法。最后我想保存 8 x 6 帧。
这可以做到吗?我不知道。我只循环过变量,从来没有不同的语句。
我正在考虑使用一个类或为每个过滤器定义一个函数,但我也不知道如何遍历这些。有没有办法用python做到这一点?
解决方案
如果您将每个过滤方法转换为将返回单个数组或列表的function(),则可以使用以下格式的 for 循环替换注释块:
# List of filtering functions as strings without the ()
list_of_methods = ["np.sum", "np.mean", "np.std"]
for method in list_of_methods:
# Converts each method into the filtering_function() at a time
exec("filtering_function = " + method)
# Appends the resulting list of results fomr the filtering_function() to the original dataset
dff[method] = filtering_function(dff)
最后,您将拥有一个包含与过滤函数一样多的列的 DataFrame。您甚至可以使用以下代码块将列附加到 DataFrame 时自定义列的名称:
col_name = method + "_results"
dff[col_name] = filtering_function(dff)
推荐阅读
- c++ - 新安装cmake“无法编译简单的测试程序”。
- node.js - Promise.all().finally() 可以返回未解析的数据吗?
- javascript - 基本 Firefox 插件 - browser.browserAction.onClicked.addListener(...) 和 browser.tabs.executeScript(...) 不起作用
- typescript - Babel 无法识别 VueJS 组件中的 TypeScript,在其他地方工作
- postgresql - 使用 postgresql 创建表时出错
- apache-kafka - Kafka / RabbitMQ 中的每条消息确认
- android - file.createNewFile() 的结果;将 SQLite 数据库导出到 CSV Android Java 时被忽略
- c++ - 如果现代opengl中有多个纹理,则没有纹理
- java - 从java中的json数组获取值
- sql - apache derby 复合函数报错问题