我应该使用字典还是系列来保存一堆数据框?
Should I use the dictionary or the series to hold a bunch of dataframe?
假设我有几个数据帧:df1、df2、df3等。每个数据帧的标签是A1、A2、A3等。我想把这些信息作为一个整体来使用,这样我就可以传递它们。我想到了三种方法:
方法一
使用标签列表:labels=["A1", "A2", "A3"...]
和数据帧列表 dfs=[df1, df2, df3...]
。
方法二
使用字典:d={"A1": df1, "A2": df2, "A3": df3}
。
方法三
使用 pandas 系列:s=pd.Series([df1, df2, df3], index=["A1", "A2", "A3"])
。
我会依次使用标签和数据帧,因此我认为方法1和方法3应该是我的选择。但是,使用方法 1 需要我传递两个项目,而使用方法 3 我只需要保留一个对象。 将数据帧放在一个系列中是一种常见的做法吗?我很少看到有人这样做,这是否违反最佳做法?有没有更好的建议?
OrderedDict
可能比使用系列更传统。
from collections import OrderedDict
d = OrderedDict([("A1", df1), ("A2", df2), ("A3", df3)])
这很容易迭代:
for label, df in d:
print(label, df)
也就是说,我看不出有什么充分理由不使用 pandas 系列。使用该系列的一个小优点是您可以使用点符号 s.A1
、s.A2
等以及使用类似字典的符号 s["A1"]
访问数据帧。使用系列,也可以相对容易地对数据帧进行排序,在中间插入额外的数据帧,或者在以后需要时将额外的元数据与它们相关联。
(请参阅 关于 Python 3.6 和 3.7 中的字典排序 - 如果使用 Python 3.7,您可以使用普通字典而不是 OrderedDict
并且您不需要使用其他 'ordered' 行为。在 Python 3.6 中,插入顺序的保留是一个实现细节,不应依赖。)
方法二也可以。从 Python 3.6 开始,它也会记住创建的顺序。
假设我有几个数据帧:df1、df2、df3等。每个数据帧的标签是A1、A2、A3等。我想把这些信息作为一个整体来使用,这样我就可以传递它们。我想到了三种方法:
方法一
使用标签列表:labels=["A1", "A2", "A3"...]
和数据帧列表 dfs=[df1, df2, df3...]
。
方法二
使用字典:d={"A1": df1, "A2": df2, "A3": df3}
。
方法三
使用 pandas 系列:s=pd.Series([df1, df2, df3], index=["A1", "A2", "A3"])
。
我会依次使用标签和数据帧,因此我认为方法1和方法3应该是我的选择。但是,使用方法 1 需要我传递两个项目,而使用方法 3 我只需要保留一个对象。 将数据帧放在一个系列中是一种常见的做法吗?我很少看到有人这样做,这是否违反最佳做法?有没有更好的建议?
OrderedDict
可能比使用系列更传统。
from collections import OrderedDict
d = OrderedDict([("A1", df1), ("A2", df2), ("A3", df3)])
这很容易迭代:
for label, df in d:
print(label, df)
也就是说,我看不出有什么充分理由不使用 pandas 系列。使用该系列的一个小优点是您可以使用点符号 s.A1
、s.A2
等以及使用类似字典的符号 s["A1"]
访问数据帧。使用系列,也可以相对容易地对数据帧进行排序,在中间插入额外的数据帧,或者在以后需要时将额外的元数据与它们相关联。
(请参阅 OrderedDict
并且您不需要使用其他 'ordered' 行为。在 Python 3.6 中,插入顺序的保留是一个实现细节,不应依赖。)
方法二也可以。从 Python 3.6 开始,它也会记住创建的顺序。