使用for循环创建n个数据帧

时间:2020-05-07 21:08:04

标签: python pandas

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

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, ... 

假设我有23个csv文件(此长度由数据帧给定,因为它附加了每个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)

之间

2 个答案:

答案 0 :(得分:1)

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

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'],这就是第一个数据帧。

答案 1 :(得分:0)

from glob import glob
import pandas as pd
for i, path in enumerate(glob('*.csv')):
    exec("{} = {}".format("df{0:03d}".format(i), pd.read_csv(path, encoding = 'latin-1')))

如果需要,您可以将0:03d位调整为前导零的数量,也可以将其与df{i}一起跳过。