代码之家  ›  专栏  ›  技术社区  ›  rpanai

Dask数据帧将列表的列拆分为多列

  •  4
  • rpanai  · 技术社区  · 8 年前

    import pandas as pd
    df = pd.DataFrame({"lists":[[i, i+1] for i in range(10)]})
    df[['left','right']] = pd.DataFrame([x for x in df.lists])
    

    dask.dataframe

    使现代化

    到目前为止,我找到了这个解决方法

    ddf = dd.from_pandas(df, npartitions=2)
    ddf["left"] = ddf.apply(lambda x: x["lists"][0], axis=1, meta=pd.Series())
    ddf["right"] = ddf.apply(lambda x: x["lists"][1], axis=1, meta=pd.Series())
    

    1 回复  |  直到 8 年前
        1
  •  9
  •   thebeancounter    8 年前

    您可以使用 assign :

    ddf = ddf.assign(left=ddf.lists.map(lambda x: x[0]),
                     right=ddf.lists.map(lambda x: x[1]))
    

    ddf.compute()
    
    
         lists  left  right
    0   [0, 1]     0      1
    1   [1, 2]     1      2
    2   [2, 3]     2      3
    3   [3, 4]     3      4
    4   [4, 5]     4      5
    5   [5, 6]     5      6
    6   [6, 7]     6      7
    7   [7, 8]     7      8
    8   [8, 9]     8      9
    9  [9, 10]     9     10
    

    另一种措辞方式(见下面的评论)可能是

    ddf = ddf.assign(**{k: ddf.lists.map(lambda x, i=i: x[i]) 
                     for i, k in enumerate(['left', 'right'])})