合并与正则表达式模式-熊猫

时间:2020-02-26 04:56:27

标签: python r regex pandas merge

我希望合并名称匹配正则表达式模式的许多不同数据框。 (不是列名,而是数据框本身的名称)。

归功于this page上接受的回复,我可以通过以下方式获得所需的输出:

reduce(lambda x, y: pd.merge(x, y, on = 'variable'), [df1, df2, df3])

但是,全都键入它们是很乏味的。我希望的数据帧都标记有前缀“ m_”,所以我希望可以有一种使用正则表达式的简单方法来匹配所有使用“ ^ m _” 的数据帧。

为提供更多背景信息,I have already made a post regarding this issue in RStudio。实际上,我已经知道如何在R中做到这一点,但是这个问题是关于如何将所有代码放入我自己的函数中的(我也很想知道在这种情况下该如何做)。因此,如果可以通过某种方式获得帮助,则它与我正在尝试的 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 个答案:

答案 0 :(得分:2)

这应该做到:

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))

如果未提供任何模式,则global_pd_dfs()会列出全局环境中的所有熊猫dfs。并且multi_merge()将尝试在全球环境中合并所有熊猫dfs。

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