我想知道如何使用下面的代码以不同的方式命名要创建的数据框。
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
,如代码中所示,但我不知道如何让值介于1
和len(paths)
答案 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}
一起跳过。