使用pandas,我希望使用b
列
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)
所有这些都会导致相同的结果。有推荐的方法吗?
感谢。
答案 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