combine_first和fillna有什么区别?
问题描述:
这两个功能对我来说似乎相当。你可以看到他们在下面的代码中完成了相同的目标,因为列c和d是相等的。那么我应该什么时候使用一个呢?combine_first和fillna有什么区别?
下面是一个例子:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0, 10, size=(10, 2)), columns=list('ab'))
df.loc[::2, 'a'] = np.nan
返回:
a b
0 NaN 4
1 2.0 6
2 NaN 8
3 0.0 4
4 NaN 4
5 0.0 8
6 NaN 7
7 2.0 2
8 NaN 9
9 7.0 2
这是我的出发点。现在,我将增加两列,一个使用combine_first和一个使用fillna,他们会产生相同的结果:
df['c'] = df.a.combine_first(df.b)
df['d'] = df['a'].fillna(df['b'])
返回:
a b c d
0 NaN 4 4.0 4.0
1 8.0 7 8.0 8.0
2 NaN 2 2.0 2.0
3 3.0 0 3.0 3.0
4 NaN 0 0.0 0.0
5 2.0 4 2.0 2.0
6 NaN 0 0.0 0.0
7 2.0 6 2.0 2.0
8 NaN 4 4.0 4.0
9 4.0 6 4.0 4.0
信贷对这个问题的数据集:Combine Pandas data frame column values into new column
答
combine_first
旨在用于存在非重叠索引时。它将有效地填充空值,并为第一个不存在的索引和列提供值。所有的指标和列都包括在结果
现在,如果我们fillna
dfa.fillna(dfb)
w x y
a 1 2.0 3
b 4 1.0 5 # 1.0 filled in from `dfb`
通知从dfb
没有新的列或索引包含
dfa = pd.DataFrame([[1, 2, 3], [4, np.nan, 5]], ['a', 'b'], ['w', 'x', 'y'])
dfb = pd.DataFrame([[1, 2, 3], [3, 4, 5]], ['b', 'c'], ['x', 'y', 'z'])
dfa.combine_first(dfb)
w x y z
a 1.0 2.0 3.0 NaN
b 4.0 1.0 5.0 3.0 # 1.0 filled from `dfb`; 5.0 was in `dfa`; 3.0 new column
c NaN 3.0 4.0 5.0 # whole new index
通知。我们只填写了空值,其中dfa
共享索引和列信息。
在你的情况,你对一列使用fillna
和combine_first
具有相同索引。这些转换成实际上相同的东西。
我对熊猫不是很熟悉,但看起来你对[fillna]有更多的控制(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.fillna.html)而[combine_first](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.combine_first.html)是一次性完成交易 – Wondercricket