Python 将一列中的nan替换为pandas中另一列的值:what';我的密码有问题吗

Python 将一列中的nan替换为pandas中另一列的值:what';我的密码有问题吗,python,pandas,Python,Pandas,我有一个如下所示的数据帧。我需要用同一行中b列的相应值替换a列中的nan df = pd.DataFrame({'a': [1,2,3,4,np.nan, np.nan, 5], 'b': [4,5,6,7,8,9,1]}) df['a'] =df.apply(lambda row: row['b'] if row['a'].isnull() else row['a'] ) 我得到一个错误: KeyError: ('a', 'occurred at ind

我有一个如下所示的数据帧。我需要用同一行中b列的相应值替换a列中的nan

df = pd.DataFrame({'a': [1,2,3,4,np.nan, np.nan, 5],
                   'b': [4,5,6,7,8,9,1]})
df['a'] =df.apply(lambda row: row['b'] if row['a'].isnull() else row['a'] )
我得到一个错误:

KeyError: ('a', 'occurred at index a')

我在代码中做错了什么?我想了很久,不明白为什么它不起作用。有人能帮我吗?非常感谢。

您必须通过index=1才能对行进行操作。这里的代码适用于我:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [1,2,3,4,np.nan, np.nan, 5],
                   'b': [4,5,6,7,8,9,1]})

df['a'] =df.apply(lambda row: row['b'] if pd.isnull(row['a']) else row['a'], axis=1)

df

必须传递index=1才能对行进行操作。这里的代码适用于我:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [1,2,3,4,np.nan, np.nan, 5],
                   'b': [4,5,6,7,8,9,1]})

df['a'] =df.apply(lambda row: row['b'] if pd.isnull(row['a']) else row['a'], axis=1)

df

您需要使用
axis=1
,还必须使用
pd.isnull(第['a'行])

尽管如此,您不应该使用
。首先应用
,使用
fillna

In [9]: df.a.fillna(df.b)
Out[9]:
0    1.0
1    2.0
2    3.0
3    4.0
4    8.0
5    9.0
6    5.0
Name: a, dtype: float64
更一般地说,对于任何谓词,使用
pd.Series.where

In [32]: df.a.where(pd.notnull, df.b)
Out[32]:
0    1.0
1    2.0
2    3.0
3    4.0
4    8.0
5    9.0
6    5.0
Name: a, dtype: float64

您需要使用
axis=1
,还必须使用
pd.isnull(第['a'行])

尽管如此,您不应该使用
。首先应用
,使用
fillna

In [9]: df.a.fillna(df.b)
Out[9]:
0    1.0
1    2.0
2    3.0
3    4.0
4    8.0
5    9.0
6    5.0
Name: a, dtype: float64
更一般地说,对于任何谓词,使用
pd.Series.where

In [32]: df.a.where(pd.notnull, df.b)
Out[32]:
0    1.0
1    2.0
2    3.0
3    4.0
4    8.0
5    9.0
6    5.0
Name: a, dtype: float64

np.nan!=np.nan
,这行不通,您必须使用
pd.isnull(…)
math.isnan(…)
np.nan!=np.nan
,这行不通,您必须使用
pd.isnull(…)
math.isnan(…)