Python 数据帧值\将相同的值作为唯一值单独计数

Python 数据帧值\将相同的值作为唯一值单独计数,python,pandas,dataframe,nan,dtype,Python,Pandas,Dataframe,Nan,Dtype,我试着换新的?在具有列模式的数据集中 首先,我使用 df['bare_nucleoli'].value_counts() 这就是结果 1 402 10 132 5 30 2 30 3 28 8 21 4 19 ? 16 9 9 7 8 6 4 Name: bare_nucleoli, dtype: int64 因此,我决定先将问号改为NaN,以便检查其他列中的标记 import nu

我试着换新的?在具有列模式的数据集中

首先,我使用

df['bare_nucleoli'].value_counts()
这就是结果

1     402
10    132
5      30
2      30
3      28
8      21
4      19
?      16
9       9
7       8
6       4
Name: bare_nucleoli, dtype: int64
因此,我决定先将问号改为NaN,以便检查其他列中的标记

import numpy as np
df.replace('?',np.nan, inplace = True)
然后将NaN更改为该列的模式,即1

df['bare_nucleoli'].fillna(1, inplace = True)
结果表明,它改变了NaN值,但它被单独计算为另一个唯一值,如下所示

1     402
10    132
5      30
2      30
3      28
8      21
4      19
1      16
9       9
7       8
6       4
Name: bare_nucleoli, dtype: int64

这背后的原因是什么?如何更改值并将其放入同一组?

只是猜测,但如果尝试df.dtypes,您可能会发现第一列是对象类型。第一个可能是字符串“1”,而不是数字1。

可能是字符串而不是整数。你可以用更简单的方法实现你的目标

 bare_nucleoli_mode = df['bare_nucleoli'].mode()
 df['bare_nucleoli'] = df['bare_nucleoli'].replace('?', bare_nucleoli_mode)`.
试试看:

df.loc[df['bare_nucleoli'] == '?'] = 1
df['bare_nucleoli'].value_counts()

注意:模式并不总是标量,因此如果存在多个模式,
.mode()
可以返回一个元组(在本例中似乎不是这样)。已经提供的答案可能在正确的轨道上,原始值是字符串。您可以将
.replace()
行替换为
df['bare\u nucleoli']=pd.to\u numeric(df['bare\u nucleoli'],errors='concurve')
,这将负责将
转换为
NaN
以及将整个列转换为数值。然后您可以运行
.fillna()
。问题解决了!谢谢