为了账号安全,请及时绑定邮箱和手机立即绑定

合并与正则表达式模式匹配的数据帧列表 - pandas

合并与正则表达式模式匹配的数据帧列表 - pandas

皈依舞 2022-08-11 17:14:16
我希望将许多不同的数据框与正则表达式模式的名称合并。(不是列名,我的意思是数据帧本身的名称)。通过此页面上接受的响应,我能够通过以下方式获得所需的输出:reduce(lambda x, y: pd.merge(x, y, on = 'variable'), [df1, df2, df3])但是将它们全部键入是相当乏味的。我想要的数据帧都标有前缀“m_”,所以我希望有一种简单的方法可以使用正则表达式来匹配我使用“^m_”的所有数据框。为了提供更多的背景信息,我已经在RStudio中发表了一篇关于这个问题的帖子。事实上,我已经知道如何在R中做到这一点,但问题是关于如何将所有代码推入我自己的函数中(在这种情况下,我也想知道该怎么做)。因此,如果它以任何方式有所帮助,那么这与我正在尝试做的事情完全相同:Reduce(function(...) merge(..., all = TRUE), mget(apropos("^m_")))如果可能的话,像这样制作我自己的函数(但仍然用python来做这件事):multi.merge <- function(pattern){    Reduce(function(...) merge(..., all = TRUE), mget(apropos(pattern), envir=.GlobalEnv))}output <- multi.merge("^m_")但是,如果您不知道R中的含义,希望我想要的输出仍然清晰。
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

这应该这样做:


def global_pd_dfs(pattern=None, return_values=False):

    dct = globals()

    if pattern is None:

        return [dct[x] if return_values else x for x in dct.keys() if type(dct[x]) == pd.core.frame.DataFrame]

    else:

        pattern = re.compile(pattern)

        return [dct[x] if return_values else x for x in dct.keys() if type(dct[x]) == pd.core.frame.DataFrame and pattern.match(x)]


def multi_merge(pattern=None):

    return reduce(lambda x, y: pd.merge(x, y, on = 'variable'), global_pd_dfs(pattern=pattern, return_values = True))

如果没有给出模式,则列出全局环境中的所有 pandas dfs。并将尝试将全球环境中的所有大熊猫dfs合并。global_pd_dfs()multi_merge()


R可以被Python模仿,但是,最后一个是字典。ls()globals()


查看完整回答
反对 回复 2022-08-11
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号