首页 > 解决方案 > 使用 for 循环创建 n 个数据帧

问题描述

我想知道如何以不同的方式命名我将使用下面的代码创建的数据框。

import pandas as pd
import glob

os.chdir("/Users/path")

dataframes=[]

paths =  glob.glob("*.csv")

for path in paths:
        dataset= pd.read_csv(path)
    dataframes.append(dataset)

我想要这样的东西:

df1
df2
df3
.... 

为了将它们中的每一个用于不同的分析目的。在文件夹中,我有类似的文件

analysis_for_market.csv, dataset_for_analysis.csv, test.csv, ... 

假设我有23csv 文件(这个长度由数据帧给出,因为它附加了每个 df)。对于他们每个人,我想在 python 中创建一个数据框 df 以运行不同的分析。我会为其中之一做:

df=pd.read_csv(path)(路径是"/path/analysis_for_market.csv")。然后我可以处理它(添加列,删除它们,等等)。但是,我还希望能够使用另一个数据集,比如说dataset_for_analysis.csv,所以我需要创建一个新的数据框,df2。如果我想比较行,这可能很有用。等等。可能我需要每个数据集的 df ,所以我需要23 df. 我认为可以使用 for 循环来完成,但我不知道如何调用 df(例如,df.describe为上面的两个示例执行)。你能告诉我怎么做吗?如果您发现可能与我有关的问题,请在关闭我的问题之前将其添加到评论中(因为在解决我的问题之前已关闭之前的帖子)?

感谢您的帮助和理解。

更新:

import os
import pandas as pd
import glob

os.chdir("/Users/path")

paths =  glob.glob("*.csv")

dataframes=[]

df={}
for x in range(1,len(paths)):
    for path in paths:
            df["0".format(x)]=pd.read_csv(path)

        #dataframes[path] = df # it gives me the following error: TypeError: list indices must be integers or slices, not str

df["2"]

它仅适用0于代码中的内容,但我不知道如何让值介于1len(paths)

标签: pythonpandas

解决方案


设置数据框的名称将完成这项工作。

import pandas as pd
import glob
import os

os.chdir("/Users/path")

df = {}

paths =  glob.glob("*.csv")

for index, path in enumerate(paths):
      df[str(index)]= pd.read_csv(path)

这对我来说很好。如果我调用 df['0'],这给了我第一个数据帧。


推荐阅读