【问题标题】:python dask dataframe splitting column of tuples into two columnspython dask数据框将元组的列拆分为两列
【发布时间】:2017-11-19 12:21:23
【问题描述】:

我正在使用带有 dask 的 python 2.7

我有一个数据框,其中包含我这样创建的一列元组:

table[col] = table.apply(lambda x: (x[col1],x[col2]), axis = 1, meta = pd.Dataframe) 

我想将此元组列重新转换为两个单独的列 在熊猫中,我会这样做:

table[[col1,col2]] = table[col].apply(pd.Series) 

这样做的重点是 dask 数据框不支持多索引,我想根据多列使用 groupby,并希望创建一个元组列,它会给我一个包含我需要的所有值的单个索引(请忽略效率与多索引,因为还没有完全支持这是 dask 数据帧)

当我尝试使用以下代码用 dask 解压元组列时:

rxTable[["a","b"]] = rxTable["tup"].apply(lambda x: s(x), meta = pd.DataFrame, axis = 1)

我收到这个错误

AttributeError: 'Series' 对象没有属性 'columns'

当我尝试时

rxTable[["a","b"]] = rxTable["tup"].apply(dd.Series, axis = 1, meta = pd.DataFrame)

我也一样

如何获取一列元组并将其转换为两列,就像我在 Pandas 中所做的那样没有问题?

谢谢

【问题讨论】:

    标签: python python-2.7 pandas dataframe dask


    【解决方案1】:

    我发现这种方法效果很好,并且避免了将 Dask DataFrame 转换为 Pandas:

    df['a'] = df['tup'].str.partition(sep)[0]
    df['b'] = df['tup'].str.partition(sep)[2]
    

    sep 是您在列中用来分隔两个元素的分隔符。

    【讨论】:

      【解决方案2】:

      我发现最好的方法是转换为 pandas 数据框,然后转换列,然后返回 dask

      df1 = df.compute()
      df1[["a","b"]] = df1["c"].apply(pd.Series)
      df = dd.from_pandas(df1,npartitions=1)
      

      这会很好用,如果 df 对内存来说太大了,您可以: 1.只计算想要的列,将其转换为两列,然后使用合并将拆分结果转换为原始df 2.将df拆分成块,然后将每个块转换并添加到一个hd5文件中,然后使用dask将整个hd5文件读入dask数据帧

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-09
        相关资源
        最近更新 更多