我希望合并名称匹配正则表达式模式的许多不同数据框。 (不是列名,而是数据框本身的名称)。
归功于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中的任何含义,希望我的期望输出仍然清晰。
答案 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()
模仿,但是最后一个是字典。