pandas cut():如何转换nans?或者将输出转换为非类别?

2024-09-30 20:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用熊猫。切()在具有nan的数据帧列上。我需要在的输出上运行groupby熊猫剪(),因此我需要将nan转换为其他内容(在输出中,而不是在输入数据中),否则groupby将愚蠢而恼人地忽略它们。在

我知道cut()现在输出分类数据,但我无法找到向输出中添加类别的方法。我尝试过add_categories(),它运行时没有任何警告或错误,但由于没有添加类别而不能工作,事实上,fillna失败的原因正是这个原因。下面是一个极简主义者的例子。在

有什么想法吗?在

或者有没有一种简单的方法可以把这个定类对象转换成非定类对象?我试过了np.A阵列()但运气不佳-它变成了一个包含间隔对象的数组

import pandas as pd
import numpy as np

x=[np.nan,4,6]
intervals =[-np.inf,4,np.inf]
out_nolabels=pd.cut(x,intervals)
out_labels=pd.cut(x,intervals, labels=['<=4','>4'])
out_nolabels.add_categories(['missing'])
out_labels.add_categories(['missing'])

print(out_labels)
print(out_nolabels)

out_labels=out_labels.fillna('missing')
out_nolabels=out_nolabels.fillna('missing')

这是另一个关于Pandas是如何处理丢失数据的最差工具的问题。就像有人聚在一起想:我们如何才能让那些愚蠢到用Python和Pandas分析数据的人生活更艰难?我知道,让我们把nans从groupby中删除吧!在


Tags: 数据对象addlabelsnpnanoutpd
1条回答
网友
1楼 · 发布于 2024-09-30 20:37:23

正如文档所说,超出界限的数据将被视为Na类别对象,因此不能在分类数据since the new value you are filling is not in that categories中使用fillna

Any NA values will be NA in the result. Out of bounds values will be NA in the resulting Categorical object

您不能使用x.fillna('missing'),因为missing不在x的类别中,但是您可以使用x.fillna('>4'),因为>4在该类别中。在

我们可以利用np.哪里来克服这个问题

x = pd.cut(df['id'],intervals, labels=['<=4','>4'])

np.where(x.isnull(),'missing',x)
array(['<=4', '<=4', '<=4', '<=4', 'missing', 'missing'], dtype=object)

add_categories的值,即

^{pr2}$

如果您想将nan分组并保留数据类型,一种方法是将其强制转换为str,即如果您有一个数据帧

df = pd.DataFrame({'id':[1,1,1,4,np.nan,np.nan],'value':[4,5,6,7,8,1]})

df.groupby(df.id.astype(str)).mean()

输出:

     id  value
id             
1.0  1.0    5.0
4.0  4.0    7.0
nan  NaN    4.5

相关问题 更多 >