Python 熊猫用列值填充NaN
给定以下数据帧:Python 熊猫用列值填充NaN,python,pandas,Python,Pandas,给定以下数据帧: import pandas as pd import numpy as np df = pd.DataFrame({'A':[1,1,np.nan], 'B':[2.2,np.nan,2.2]}) df A B 0 1.0 2.2 1 1.0 NaN 2 NaN 2.2 如果我想将A列中的NaN值替换为该列(1)中重复的值,并对B列执行相同的操作,那么我需要使
import pandas as pd
import numpy as np
df = pd.DataFrame({'A':[1,1,np.nan],
'B':[2.2,np.nan,2.2]})
df
A B
0 1.0 2.2
1 1.0 NaN
2 NaN 2.2
如果我想将A列中的NaN值替换为该列(1)中重复的值,并对B列执行相同的操作,那么我需要使用哪种类型的fillna()
A B
0 1.0 2.2
1 1.0 NaN
2 NaN 2.2
寻找一个通用的解决方案,因为我真的有数千行。
提前谢谢
fillna
可以使用值字典,其中键是列名
假设要使用重复次数最多的值填充列,则可以使用以下值计算字典:
df = pd.DataFrame({
'A': [1, 1, np.nan, 2],
'B': [2.2, np.nan, 2.2, 1.9]
})
fill_dict = df.mode().to_dict(orient='records')[0]
df = df.fillna(values=fill_dict)
df
A B
0 1 2.2
1 1 2.2
2 1 2.2
3 2 1.9
然后再加上
df['A'].fillna(most_common(df['A'].values.tolist()))
为什么不简单地:
df.fillna(method='ffill')
# df = pd.DataFrame({'A': [1, 1, np.nan, 2], 'B': [2.2, np.nan, 2.2, 1.9]})
# df.fillna(method='ffill')
# A B
#0 1 2.2
#1 1 2.2
#2 1 2.2
#3 2 1.9
我对您使用itertools实现的
模式
印象深刻。但即使我们暂时忘记熊猫数据帧有自己的模式
方法,使用numpy的模式函数肯定会更可靠。是的,我同意。。。我只是忘记了模式,所以我做了这个。。。不知道它是否正确!!!!从OP中不清楚填充值应该是上一个值,还是列中最常见的值。嗯,我把它理解为上一个值,但你可能是对的。从我的示例中,这是我一直在寻找的简单答案。但是,如果我想用最常见的值填充,该怎么办?我最终试图填补df.loc和groupby转换过程产生的空白,该过程会留下一些行值空白。我将在一分钟后发布另一个相关问题,更好地总结我要做的事情。首先转置,然后是ffil
或bfill
:df.T.ffill().bfill().T
df.fillna(method='ffill')
# df = pd.DataFrame({'A': [1, 1, np.nan, 2], 'B': [2.2, np.nan, 2.2, 1.9]})
# df.fillna(method='ffill')
# A B
#0 1 2.2
#1 1 2.2
#2 1 2.2
#3 2 1.9