【问题标题】:Merge a list of dataframes within a list in Python在 Python 中的列表中合并数据框列表
【发布时间】:2021-09-19 07:24:54
【问题描述】:

我有 32 个单独的数据框列表。我需要将每个列表合并在一起,我期待 32 个不同的数据框。我知道如何将 1 个数据框列表合并在一起,但我目前正在计算 32 次不同的时间。我想知道是否有一种简单的方法可以进行相同的计算?我目前有这个,我知道我正在创建一个新变量,但我不知道如何将它从输入中分配回原始列表。 “Weather_List”是一个包含每个列表的列表,其中包含需要合并的数据框。

示例列表、data 和 data_day1 包含名为“snow”、“temp”等的数据帧。weather_list 包含 data 和 data_day1 列表

    data = [snow, temp, windspd]
    data_day1 = [snow_day1, temp_day1, windspd_day1]
    weather_list = [data, data_day1]
    def mergedf(item):
        reduce(lambda left,right: pd.merge(left,right,on=['Latitude','Longitude'], how = 'outer'), item


    [mergedf(items) for items in weather_list]

我需要稍后在我的程序中使用每个合并的数据框。

【问题讨论】:

    标签: python pandas list loops merge


    【解决方案1】:

    考虑map 以元素方式循环遍历您可以使用* 升级的对象列表。

    data = [snow, temp, windspd]
    data_day1 = [snow_day1, temp_day1, windspd_day1]
    weather_list = [data, data_day1]
    
    def proc_merge(left, right):
        return pd.merge(left, right, on=['Latitude', 'Longitude'])
    
    df_list = list(map(proc_merge, *weather_list))
    

    为了保留命名,请考虑使用键而不是未命名列表构建数据帧字典,您可以通过 zip 循环对其进行迭代:

    names = ['snow', 'temp', 'windspd']
    df_dict = {nm: lst for nm, lst in zip(names, map(proc_merge, *weather_list))}
    
    df_dict['snow']      # SINGLE DATAFRAME
    df_dict['temp']      # SINGLE DATAFRAME
    df_dict['windspd']   # SINGLE DATAFRAME
    

    对于两个以上的数据框,将reduce 与开放式参数数量相结合:

    data = [snow, temp, windspd]
    data_day1 = [snow_day1, temp_day1, windspd_day1]
    data_day2 = [snow_day2, temp_day2, windspd_day2]
    data_day3 = [snow_day3, temp_day3, windspd_day3]
    
    weather_list = [data, data_day1, data_day2, data_day3]
    
    def proc_merge(*dfs):
        return reduce(lambda left, right: pd.merge(left, right, on=['Latitude', 'Longitude'], how ='outer'), dfs)
    
    names = ['snow', 'temp', 'windspd']
    df_dict = {nm: lst for nm, lst in zip(names, map(proc_merge, *weather_list))}
    

    【讨论】:

    • 谢谢,我得到了一个新的数据框列表,这些数据框都已合并,这就是我正在寻找的。无论如何要进行就地合并,以便我可以让所有数据框与列表具有相同的名称?我需要在整个程序的其余部分中使用这些名称的数据框。
    • 嗯....一个 Python 列表是未命名的,这与带有键的字典不同。您可以使用示例数据编辑帖子以阐明您的意思吗?
    • 我已经编辑了帖子。基本上我所追求的是数据 = 列表中 3 个数据帧的合并。
    • 查看修改后的答案(现在我看到了实际的数据对象)。考虑使用字典而不是列表作为名称键。否则,您将需要使用不明智的 globals() 字典通过字符串引用来保存对象名称。
    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2020-11-13
    • 2018-11-18
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2018-05-28
    相关资源
    最近更新 更多