【问题标题】:selecting not None value from a dataframe column从数据框列中选择非无值
【发布时间】:2017-11-17 03:37:43
【问题描述】:

我想使用fillna 函数用它自己的第一个最常见的值(不是None 或nan)填充列的None 值。

输入 DF:

Col_A
a
None
None
c
c
d
d

输出数据框可以是:

Col_A
a
c
c
c
c
d
d

任何建议将不胜感激。 非常感谢,最好的问候, 卡罗

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    前奏:如果您的None 实际上是一个字符串,您可以通过首先摆脱它们来简化任何令人头疼的问题。使用replace

    df = df.replace('None', np.nan)
    

    我相信你可以使用fillna + value_counts

    df
    
      Col_A
    0     a
    1   NaN
    2   NaN
    3     c
    4     c
    5     d
    6     d
    
    df.fillna(df.Col_A.value_counts(sort=False).index[0])
    
      Col_A
    0     a
    1     c
    2     c
    3     c
    4     c
    5     d
    6     d
    

    或者,根据 Vaishali 的建议,使用 idxmax 选择 c

    df.fillna(df.Col_A.value_counts(sort=False).idxmax())
    
      Col_A
    0     a
    1     c
    2     c
    3     c
    4     c
    5     d
    6     d
    

    填充值可以是cd,具体取决于您是否包含sort=False

    详情

    df.Col_A.value_counts(sort=False)
    
    c    2
    a    1
    d    2
    Name: Col_A, dtype: int64
    

    【讨论】:

    • 或 value_counts().idxmax() 虽然这会再次给出 'd'。
    • @Vaishali 不,你是对的。只要sort=False,什么都行。
    • 从不关注 value_counts() 中的排序参数,好一个:)
    • 嗨 Vaishali,谢谢。申请我的日期时,我收到错误:ValueError:尝试获取空序列的 argmax
    • 对我来说有趣的 df.Col_A.value_counts(sort=False) 按顺序返回 A 1、C 2、D 2。
    【解决方案2】:

    fillna + mode

    df.Col_A.fillna(df.Col_A.mode()[0])
    Out[963]: 
    0    a
    1    c
    2    c
    3    c
    4    c
    5    d
    6    d
    Name: Col_A, dtype: object
    

    【讨论】:

    • 你好文,谢谢。如果 mode 是 None 呢?
    • @CarloAllocca 您可以先将 None 替换为 np.nan
    • @CarloAllocca 这里的假设是 None = np.nan。如果不是(如果是字符串),请致电df = df.replace('None', np.nan),然后我们的两个答案都可以完美运行。
    【解决方案3】:

    要解决“无”,您需要使用 replace 然后 fillna 就像@COLDSPEED 建议的那样:

    dr = df.Col_A.replace('None',np.nan)
    dr.fillna(dr.dropna().value_counts().index[0])
    

    输出:

    0    a
    1    d
    2    d
    3    c
    4    c
    5    d
    6    d
    Name: Col_A, dtype: object
    

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多