【发布时间】: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
任何建议将不胜感激。 非常感谢,最好的问候, 卡罗
【问题讨论】:
我想使用fillna 函数用它自己的第一个最常见的值(不是None 或nan)填充列的None 值。
输入 DF:
Col_A
a
None
None
c
c
d
d
输出数据框可以是:
Col_A
a
c
c
c
c
d
d
任何建议将不胜感激。 非常感谢,最好的问候, 卡罗
【问题讨论】:
前奏:如果您的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
【讨论】:
sort=False,什么都行。
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
【讨论】:
df = df.replace('None', np.nan),然后我们的两个答案都可以完美运行。
要解决“无”,您需要使用 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
【讨论】: