【问题标题】:How to compact a dataset with empty rows in Python?如何在 Python 中压缩包含空行的数据集?
【发布时间】:2022-11-24 18:04:05
【问题描述】:

我有一个格式如下的数据集:

sha 0_x 1_x N_x
Sha1 rm rm
Sha2 rw rw
Sha3 rw
Sha4 tr

特别是,数据集目前包含大约 2000 列。

我想减少删除尽可能多的空行的列数,如下所示:

sha 0_x 1_x
Sha1 rm rm
Sha2 rw rw
Sha3 rw
Sha4 tr

我不关心列的名称。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    假设空单元格是NaN,如果不是,首先是replace('', np.nan)。

    你可以stack和pivot:

    cols = df.columns[1:]
    # ['0_x', '1_x', 'N_x']
    
    (df.set_index('sha')
       .stack()
       .reset_index()
       .assign(cols=lambda d: d.groupby('sha')
                               .cumcount()
                               .map(dict(enumerate(cols)))
              )
       .pivot(index='sha', columns='cols', values=0)
       .reset_index()
    )
    

    其他选项,apply:

    cols = list(df.columns[1:])
    # ['0_x', '1_x', 'N_x']
    
    (df.set_index('sha')
       .apply(lambda s: s.dropna().reset_index(drop=True), axis=1)
       .pipe(lambda d: d.set_axis(cols[:len(d.columns)], axis=1))
       .reset_index()
    )
    

    输出:

    cols   sha 0_x  1_x
    0     Sha1  rm   rm
    1     Sha2  rw   rw
    2     Sha3  rw  NaN
    3     Sha4  tr  NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      相关资源
      最近更新 更多