我想用另一列的值填充一列中的缺失值.
我读到循环遍历每一行将是非常糟糕的练习,并且最好一次性完成所有操作,但我无法找到如何使用该fillna方法.
数据之前
Day Cat1 Cat2
1 cat mouse
2 dog elephant
3 cat giraf
4 NaN ant
Run Code Online (Sandbox Code Playgroud)
数据之后
Day Cat1 Cat2
1 cat mouse
2 dog elephant
3 cat giraf
4 ant ant
Run Code Online (Sandbox Code Playgroud) 可以说我有以下内容pandas DataFrame:
import pandas as pd
df = pd.DataFrame({"A":[1,pd.np.nan,2], "B":[5,6,0]})
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
>>> df
A B
0 1.0 5
1 NaN 6
2 2.0 0
Run Code Online (Sandbox Code Playgroud)
我知道一种方法来检查特定值是否NaN为,如下所示:
>>> df.isnull().ix[1,0]
True
Run Code Online (Sandbox Code Playgroud)
我认为下面的选项,使用ix,也可以,但它不是:
>>> df.ix[1,0]==pd.np.nan
False
Run Code Online (Sandbox Code Playgroud)
我也尝试iloc过相同的结果:
>>> df.iloc[1,0]==pd.np.nan
False
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用ix或检查这些值iloc:
>>> df.ix[1,0]
nan
>>> df.iloc[1,0]
nan
Run Code Online (Sandbox Code Playgroud)
那么,为什么第二种选择不起作用呢?是否可以NaN使用ix或检查值iloc?
这让我很困惑:
```
a=np.array([1,2,np.nan,3]) # an array with a nan
print(np.isnan(a)[2]) # it truly is a nan
print(a[2]) # it quacks like a nan
print(np.nan is np.nan) # nan's can be compared
print(a[2] is np.nan) # But then, this isn't a nan after all!!??
>>> True
>>> nan
>>> True
>>> False
```
Run Code Online (Sandbox Code Playgroud)
我知道我们不允许比较nan的==,但is应该被允许吗?毕竟它在比较nan与自身时有效吗?
感谢您对此处发生的任何提示.
所以基本上数据框中的列有 Nan 和 float,我想使用 apply 来计算列中的值。如果值为nan,则返回else,计算。
但看起来x is np.nanlambda 并没有给我正确的答案。这是一个例子
In[6]: df = pd.DataFrame({'A': [np.nan, np.nan, np.nan]})
In[7]: df.A.apply(lambda x: x is np.nan)
Out[7]:
0 False
1 False
2 False
Run Code Online (Sandbox Code Playgroud)
有谁知道原因吗?