循环遍历多个 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 中获取多个数据帧输出的主要内容,如果未能解决你的问题,请参考以下文章