【问题标题】:Pandas dataframe value_counts count same values seperately as unique valuesPandas dataframe value_counts 将相同的值分别计算为唯一值
【发布时间】:2021-07-29 08:00:42
【问题描述】:

我尝试替换 ?在数据集中与列的模式。

首先我使用检查该列中的唯一值

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['bare_nucleoli'] = pd.to_numeric(df['bare_nucleoli'], errors='coerce') 替换您的.replace() 行,这将负责将? 转换为NaN 并将整个列转换为数字。然后你可以运行.fillna()
  • 问题解决了!谢谢

标签: python pandas dataframe nan dtype


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    它可能是一个字符串而不是一个整数。您可以更简单地实现您的目标

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

    【讨论】:

    • 注意:mode 并不总是一个标量,所以.mode() 可以返回一个元组,如果有多个模式(不是在这种情况下,它会出现)。
    【解决方案3】:

    试试:

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

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2017-05-15
      相关资源
      最近更新 更多