我们说我有一个对象列表(在本例中为数据帧)
myList = [dataframe1, dataframe2, dataframe3 ...]
我想遍历我的列表并根据列表项的名称创建新对象。我想要的是每个数据帧的旋转版本,称为" dataframe [X] _pivot"其中[X]是该数据帧的标识符。
我的伪代码看起来像:
for d in myList:
d+'_pivot' = d.pivot_table(index='columnA', values=['columnB'], aggfunc=np.sum)
我想要的输出如下:
myList = [dataframe1, dataframe2 ...]
dataframe1_pivoted # contains a pivoted version of dataframe1
dataframe2_pivoted # contains a pivoted version of dataframe2
dataframe3_pivoted # contains a pivoted version of dataframe3
非常感谢帮助。
由于
约翰
答案 0 :(得分:2)
你不想要这样做。动态创建变量几乎总是一个非常糟糕的主意。正确的做法是简单地使用适当的数据结构来保存您的数据,例如:要么是一个列表(因为你的元素都只是编号,你也可以通过索引访问它们)或字典(如果你真的想给每个东西命名):
pivoted_list = []
for df in mylist:
pivoted_df = #whatever you need to to to turn a dataframe into a pivoted one
pivoted_list.append(pivoted_df)
#now access your results by index
do_something(pivoted_list[0])
do_something(pivoted_list[1])
同样的事情可以表达为列表理解。假设pivot
是一个函数,它接受一个数据帧并将其转换为一个旋转框架,然后这相当于上面的循环:
pivoted_list = [pivot(df) for df in mylist]
如果您确定要为元素添加名称,则可以使用enumerate
这样创建字典:
pivoted_dict = {}
for index, df in enumerate(mylist):
pivoted_df = #whatever you need to to to turn a dataframe into a pivoted one
dfname = "dataframe{}_pivoted".format(index + 1)
pivoted_dict[dfname] = pivoted_df
#access results by name
do_something(pivoted_dict["dataframe1_pivoted"])
do_something(pivoted_dict["dataframe2_pivoted"])
答案 1 :(得分:0)
实现这一目标的方法是:
globals()[d+'_pivot'] = d.pivot_table(...)
看完你的编辑后,我看到你可能想做这样的事情:
for i, d in enumerate(myList):
globals()['dataframe%d_pivoted' % i] = d.pivot_table(...)
然而,正如其他人所建议的那样,如果要创建大量全局变量,则不建议这样做。
有更好的方法(阅读:数据结构)。