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()
。问题解决了!谢谢