一般来说,数据帧不应该被初始化为空并附加到(附加到数据帧是一个缓慢的内存密集型操作)。最好将数据存储在可以快速附加数据的结构中,例如 list。
但是,要回答您的问题,您可以使用字典理解并将数据框保存在字典中。或者您可以对列表执行相同的操作。
import pandas as pd
class Data:
def __init__(self):
self.dfs = {
"df{}".format(i): pd.DataFrame(data=None)
for i in range(3)
}
然后你可以像这样访问你的数据:
data = Data()
data.dfs["df1"]
虽然使用字典的强大之处在于您可以明确地命名您的数据。所以像这样的结构可能更直观:
class Data:
def __init__(self, df_names):
self.dfs = {
name: pd.DataFrame(data=None) for name in df_names
}
data = Data(df_names=["df1", "better_named_df", "averages"])
# accessing underlying frames
data.dfs["df1"]
data.dfs["better_named_df"]
另一种使用列表理解而不是字典的方法:
import pandas as pd
class Data:
def __init__(self):
self.dfs = [pd.DataFrame(data=None) for _ in range(3)]
data = Data()
data.dfs[0]
data.dfs[1]
由于您指定您只是在读取这些数据帧以针对它们运行不同的查询,因此我根本不推荐任何课程。这是因为除了将它们读入内存之外,您不会针对每个数据帧运行任何通用功能。一个返回字典的函数就足够了:
import pathlib
import pandas as pd
def read_data(base_dir, file_names):
dataframes = {}
base_dir = pathlib.Path(base_dir)
for fname in file_names:
fpath = base_dir / fname
dataframes[fpath.stem] = pd.read_csv(fpath)
return dataframes
# you can call this function like so:
dfs = read_data("./", ["file1.csv", "file2.csv", "file3.csv"])
# frames is a dictionary with this structure:
# {"file1": dataframe from file1.csv,
# "file2": dataframe from file2.csv,
# "file3": dataframe from file3.csv}
# access data like this
dfs["file1"]