[英]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.