我想使用fillna
函数来填充列的None值,其中第一个最常用的值不是None或nan。
输入DF:
Col_A
a
None
None
c
c
d
d
输出Dataframe可以是:
Col_A
a
c
c
c
c
d
d
任何建议都将非常感谢。 非常感谢,最诚挚的问候, 卡罗
答案 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
填充值可以是c
或d
,具体取决于您是否包含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