在python中,如何将包含缺失数据的数值分组到容器中进行计数

2024-09-25 00:21:25 发布

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

我有一系列的整数值,在一个数据帧中丢失了数据(Clean),我想将它们分为更大的整数组,然后对这些数据箱进行计数(就像生成一个直方图)。它是一个很大的数据集,所以我不想通过删除nan来进行子集化。我有这个:

TLag
NaN
2
4
6
8
10
12
14
16
18
20
22

我想要这个:

^{pr2}$

我试着用pd.切割公司名称:

tbins=np.arange(0,3600,10)
Clean['LagBin']=pd.cut(Clean['TLag'],bins=tbins,right=True, labels=None,           retbins=False, precision=0, include_lowest=True)

但这会返回LagBin值作为一个范围,由于我最终想要绘制这个值,所以我真的希望这些bin是数字的。另外,当我试图使用groupby函数进行计数时(rx是多重索引中的另一个分组变量):

Hist=Clean.groupby(level=('rx','LagBin'))
Hist.count('LagBin')

但这会返回一个错误:

ValueError: Cannot convert NA to integer 

所以我想我可以通过一个简单的转换将滞后值转换为整数:

Clean['LagBin']=Clean.TLag/10
Clean['LagBin']=(int(Clean.LagBin))*10

我还尝试了hist()函数——两个函数都不起作用,产生以下错误:

TypeError: cannot convert the series to <type 'float'> 

这似乎是一个非常简单的练习,应该很简单。我错过了什么?在


Tags: 数据函数cleantrueconvert错误整数rx
2条回答

我想你的想法是对的,或多或少,你只是在学习语法。例如,我们可以使用除以10乘以10的技巧来添加一个LagBin列,然后groupby-count

In [21]: Clean["LagBin"] = (Clean["TLag"]//10)*10

In [22]: Clean
Out[22]: 
    TLag  LagBin
0    NaN     NaN
1      2       0
2      4       0
3      6       0
4      8       0
5     10      10
6     12      10
7     14      10
8     16      10
9     18      10
10    20      20
11    22      20

In [23]: Clean.groupby("LagBin", as_index=False).count()
Out[23]: 
   LagBin  TLag
0       0     4
1      10     5
2      20     2

注意,我使用了//来截断除法,这样2//10 == 0和{}(而不是{})。在

如果您希望更接近所需的输出,您可以在那里重命名TLag,或者将列本身分组:

^{pr2}$

尝试函数labelspd.切割。在

tlag = np.arange(0, 30, 2)
tbins = np.arange(0, 100, 10)
pd.value_counts(np.cut(tlag, tbins, labels = tbins[:-1]))

输出为:

^{pr2}$

相关问题 更多 >