从数据框列中选择非None值

时间:2017-11-16 18:56:46

标签: python pandas dataframe

我想使用fillna函数来填充列的None值,其中第一个最常用的值不是None或nan。

输入DF:

Col_A
a
None
None
c
c
d
d

输出Dataframe可以是:

Col_A
a
c
c
c
c
d
d

任何建议都将非常感谢。 非常感谢,最诚挚的问候, 卡罗

3 个答案:

答案 0 :(得分:6)

前奏:如果您的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

答案 1 :(得分: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

答案 2 :(得分:1)

要解决“无”问题,您需要使用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