簡體   English   中英

合並與正則表達式模式匹配的數據幀列表 - 熊貓

[英]Merge a list of dataframes that match a regex pattern - pandas

我希望合並許多不同的數據框,其名稱與正則表達式模式相匹配。 (不是列名,我的意思是數據框本身的名稱)。

歸功於此頁面上接受的響應,我能夠通過以下方式獲得所需的輸出:

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

但是把它們全部打出來是很乏味的。 我想要的數據框都標有前綴“m_”,所以我希望有一種簡單的方法可以使用正則表達式來匹配我使用“^m_”的所有數據框

為了提供更多背景信息, 我已經在 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 中意味着什么,希望我想要的輸出仍然清晰。

這應該這樣做:

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()列出全局環境中的所有 Pandas dfs。 並且multi_merge()將嘗試合並全局環境中的所有multi_merge() dfs。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM