填写pandas中缺失值的推荐方法

时间:2017-09-19 03:25:43

标签: python pandas

使用pandas,我希望使用b

中的值从以下DataFrame df1填充列a的缺失值
import pandas as pd
import numpy as np

df1 = pd.DataFrame(data=dict(a=[1, 2, 3], b=[1, np.nan, 3]))
mask = pd.isnull(df1.b)

似乎我可以使用三种不同的方式:

# first
df1.loc[mask, 'b'] = df1.loc[mask, 'a']
#second
df1.loc[mask, 'b'] = df1.a
# third
df1.fillna(value=dict(b=df1.a), inplace=True)

所有这些都会导致相同的结果。有推荐的方法吗?

感谢。

2 个答案:

答案 0 :(得分:2)

然后我们做时间:

import pandas as pd
import numpy as np
df1 = pd.DataFrame(data=dict(a=[1, 2, 3], b=[1, np.nan, 3]))
mask = pd.isnull(df1.b)
%timeit df1.loc[mask, 'b'] = df1.loc[mask, 'a']
1000 loops, best of 3: 1.15 ms per loop
%timeit df1.loc[mask, 'b'] = df1.a
1000 loops, best of 3: 1.16 ms per loop
%timeit df1.fillna(value=dict(b=df1.a), inplace=True)
1000 loops, best of 3: 215 µs per loop

#3rd one is the fastest among three. 

来自@Zero的编辑方法

%timeit df1.b = df1.b.fillna(df1.a)
1000 loops, best of 3: 371 µs per loop
%timeit df1.b.fillna(df1.a, inplace=True)
1000 loops, best of 3: 210 µs per loop

答案 1 :(得分:0)

另一种方法是使用pandas where()

objFactory