循环遍历 Python 中的列表并根据项目创建新对象
Looping through a list in Python and creating new objects based on items
假设我有一个对象列表(在本例中为数据帧)
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
将不胜感激。
谢谢
约翰
实现的方法是:
globals()[d+'_pivot'] = d.pivot_table(...)
[edit] 查看您的编辑后,我发现您可能想做这样的事情:
for i, d in enumerate(myList):
globals()['dataframe%d_pivoted' % i] = d.pivot_table(...)
但是,正如其他人所建议的那样,如果要创建大量全局变量,则不建议这样做。
有更好的方法(读作:数据结构)。
你不想要那样做。动态创建变量几乎总是一个非常糟糕的主意。正确的做法是简单地使用适当的数据结构来保存您的数据,例如列表(因为你的元素都只是编号,你也可以通过索引访问它们)或字典(如果你真的真的想给每个单独的东西命名):
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]
如果您确定要为元素使用 names,则可以使用 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"])
假设我有一个对象列表(在本例中为数据帧)
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
将不胜感激。
谢谢
约翰
实现的方法是:
globals()[d+'_pivot'] = d.pivot_table(...)
[edit] 查看您的编辑后,我发现您可能想做这样的事情:
for i, d in enumerate(myList):
globals()['dataframe%d_pivoted' % i] = d.pivot_table(...)
但是,正如其他人所建议的那样,如果要创建大量全局变量,则不建议这样做。
有更好的方法(读作:数据结构)。
你不想要那样做。动态创建变量几乎总是一个非常糟糕的主意。正确的做法是简单地使用适当的数据结构来保存您的数据,例如列表(因为你的元素都只是编号,你也可以通过索引访问它们)或字典(如果你真的真的想给每个单独的东西命名):
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]
如果您确定要为元素使用 names,则可以使用 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"])