删除pandas Dataframe 中全为零的行

dxxyhpgq  于 2023-04-18  发布在  其他
关注(0)|答案(2)|浏览(192)

我试图删除 Dataframe 中一列值为0的行,但我不知道如何删除
我开始的表格看起来像这样:
| a|B|c|d|e|
| --------------|--------------|--------------|--------------|--------------|
| 九十九点零八|0.0|0.0|0.0|0.0|
| 0.0 |九十五点八|0.0|0.0|0.0|
| 0.0 |0.0|九十七点八|0.0|0.0|
| 0.0 |0.0|九十六点七|0.0|0.0|
| 0.0 |0.0|0.0|九十八点九|0.0|
我使用pandas来处理一些分类数据。我使用pd.melt()来重塑它,所以以类似于一个热编码的方式编码的列没有问题,这让我得到了一个只有2列的数据框,正如我所希望的那样,但其中一列中有很多0。
融化后的表看起来像这样:
| 列1|col2|
| --------------|--------------|
| a|九十九点八|
| a|0.0|
| a|0.0|
| a|0.0|
| a|0.0|
| B|九十五点八|
| B|0.0|
| B|0.0|
| c|九十七点八|
| c|0.0|
| c|0.0|
| c|0.0|
| c|九十六点五|
| c|0.0|
| d|九十八点九|
我想去掉那些值,因为它们不给予信息,而且占用空间和资源
我已经尝试过what was suggested here,但它给出了一个索引错误,因为any()函数返回的数据长度与原始 Dataframe 的长度不同,据我所知。
我也试过the suggestion here,但它返回一个ValueError“cannot index with dimensional key”,因为我的df是2维的。

irlmq6kh

irlmq6kh1#

如果你想在整形时删除不需要的值,stack是一个很好的选择,因为它默认会删除NaN。你只需要在堆叠之前mask0 s:

out = (df
 .where(df.gt(0)).rename_axis(columns='col1')
 .stack().reset_index(level=1, name='col2')
)

输出:

col1   col2
0    a  99.08
1    b  95.80
2    c  97.80
3    c  96.70
4    d  98.90
dldeef67

dldeef672#

如果需要,在熔化后删除0值:

df1 = df.melt().query('value != 0')
print (df1)
   variable  value
0         a  99.08
6         b  95.80
12        c  97.80
13        c  96.70
19        d  98.90

相关问题