【问题标题】:How do I build multiple list automatically如何自动构建多个列表
【发布时间】:2019-01-27 17:30:34
【问题描述】:

我有数百个数据框,假设名称是df1,...,df250,我需要按这些数据框的一列构建列表。平时都是手动做的,今天数据太多了,容易出错

这就是我所做的

list1 = df1['customer_id'].tolist()
list2 = df2['customer_id'].tolist()
..
list250 = df250['customer_id'].tolist()

这太手动了,我们可以用更简单的方法来做吗?

【问题讨论】:

  • 为什么要拆分它? [x['customer_id'].tolist() for _, x in df.groupby(np.arange(len(df))//1000)] 基于您之前的问题
  • 数据框上已经有几列,我需要根据该列表从 MongoDB 查询几列,我按您的答案 [x['customer_id'].tolist() for _, x in df.groupby(np.arange(len(df))//1000)] 拆分,两个数据框将被合并

标签: python list pandas loops dataframe


【解决方案1】:

更简单的方法是退后一步,并确保将数据框放入 listdict 等集合中。然后,您可以以可扩展的方式轻松执行操作。

例如:

dfs = {1: df1, 2: df2, 3: df3, ... , 250: df250}

lists = {k: v['customer_id'].tolist() for k, v in dfs.items()}

然后您可以以lists[1]lists[2] 等身份访问结果。

还有其他好处。例如,您不再污染命名空间,省去了显式定义变量名的工作,您可以轻松存储和传输相关的对象集合。

【讨论】:

    【解决方案2】:

    使用exec函数可以执行存储在字符串中的python代码:

    for i in range(1,251):
       s = "list"+str(i)+" = df"+str(i)+"['customer_id'].tolist()"
       exec(s)
    

    【讨论】:

      【解决方案3】:

      我会使用下一个代码。在这种情况下,无需手动创建 DataFrame 列表。

      cust_lists = {'list{}'.format(i): globals()['df{}'.format(i)]['customer_id'].tolist()
                         for i in range(1, 251)}
      

      现在您可以按名称从 cust_lists 字典中访问您的列表,如下所示:

      `cust_lists['list1']`
      

      `list1`
      

      【讨论】:

      • 对不起,我删除了最佳答案,我尝试list3 不起作用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 2011-08-24
      相关资源
      最近更新 更多