循环遍历多个 panda 数据帧以在 Python 中获取多个数据帧输出

Posted

技术标签:

【中文标题】循环遍历多个 panda 数据帧以在 Python 中获取多个数据帧输出【英文标题】:Loop through multiple panda dataframes to get multiple dataframe output in Python 【发布时间】:2021-08-25 22:38:26 【问题描述】:

我通过在目录中循环 1000 个 csv 文件读取了 1000 个数据帧,我的代码如下:


for csv in csvs:
        df = pd.read_csv(csvs)
        dfs.append(df)

所以基本上我有dfs[0]dfs[999]。然后我创建了一个名为fun 的函数来应用于所有这些数据帧。如果只有几个数据帧要通过,我会做 output = fun(dfs[0])output2 = fun(dfs[1]) 等等,但由于我有这么多数据帧,我想以某种方式循环它们,这样我就可以获得 1000 个单独的输出 1000单独的数据框。这可行吗?另外,有没有办法一次将所有这些输出数据帧导出到 csv 文件中?我以前从未同时处理过这么多数据帧,如果有人能帮助我,我将不胜感激。提前谢谢!

【问题讨论】:

【参考方案1】:

您可以像使用循环读取 csv 一样进行操作

results = []
for df in dfs:
    results.append(fun(df))

或者您可以使用类似的列表理解来做到这一点

results = [fun(df) for df in dfs]

至于将数据帧写入 csvs,从技术上讲,它不会“立即”。一次只能读取一个文件,但是可以,您可以使用类似于这样读取它们的循环来遍历它们。

for df, filename in zip(dfs, filenames):
    df.to_csv(filename)

filenames 是一个包含 1000 个文件名的列表,这些文件名对应于您要将数据帧写入其中的 csv 文件名。

【讨论】:

如果我只想循环通过 dfs[0] 到 dfs[996],而不是每个数据帧,有没有办法指定范围? 是的,你可以通过列表切片来做到这一点。因此,在这种情况下,您将使用dfs[:997] 将 dfs[0] 转换为 dfs[996],包括 dfs[996]。或dfs[5:10] 获取 dfs[5] 到 dfs[9]。所以在 for 循环中它看起来像:for df in dfs[:997]:

以上是关于循环遍历多个 panda 数据帧以在 Python 中获取多个数据帧输出的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法循环多个数据帧以删除相同的列?

迭代 groupby 数据帧以在每一行中操作

循环遍历 Pandas 数据框以填充列表(Python)

在循环内附加数据框

Python 3 函数循环遍历 pandas 数据框以更改模式

使用 groupby 循环遍历 pandas 中的多个变量组合