首页 > 解决方案 > 为多个 Pandas DataFrames 应用自定义函数和赋值

问题描述

假设我在一个列表中有多个 Pandas DataFrame。每个 DataFrame 包含大约 300,000 行和 20 列。

df_list = [df1, df2, ..., dfn]

我想为每个 DataFrame 应用各种功能,主要用于预处理目的。但是,包含分配的功能不能很好地工作。

对于其他上下文,我首先编写了仅关于单个 DataFrame 的原始代码。现在我正在尝试将代码与许多 DataFrame 一起应用。

为了说明,以下是我对此事的尝试:

什么有效:

[df.drop([0], inplace = True) for df in df_list]

...不需要在df_listor dfs 上“显式”分配。很简单。

什么不:

同样,我正在尝试应用自定义函数并更新每个 DataFrame,而无需重复/冗余的代码行。例如,我定义了一个改变列顺序的函数:

def col_change(df):
    cols = df.columns.tolist()
    cols = cols[:6] + [cols[-1]] + cols[6:-1]
    return df[cols]

起初,for循环似乎是一个没有任何功能的简单解决方案,但如果我没记错的话,最终发现for循环并没有改变原始元素的值。

for df in df_list:
    cols = df.columns.tolist()
    cols = cols[:6] + [cols[-1]] + cols[6:-1]
    df = df[cols]

通过进一步研究,我尝试了其他想法:

df_list[:] = map(col_change, df_list)
df_list = [col_change(df) for df in df_list]

无济于事,因为 DataFrame 中的列如df2不会改变。

所以:

作为一个有点令人不快的解决方案,我使用了以下代码行:

df1 = col_change(df1)
...
dfn = col_change(dfn)

有没有其他方法可以在不编写我拥有的每个 DataFrame 的情况下实现这一目标?为什么map函数或列表理解在这种情况下不起作用?

另外,有人可以就这个工作流程提供任何建议吗?我有一种感觉,拥有这么多单独的 DataFrame 可能不是最好的……在此先感谢!

标签: pythonpandasdataframe

解决方案


推荐阅读