通过检查多个列中的值来修改熊猫中的空列的内容

时间:2018-08-25 19:13:34

标签: python pandas dataframe

如何在熊猫中以较少的步骤轻松地对数据框进行以下操作?

输入:

di = {'col1': ['1', '2', '5',None, None,'10', None,None], 
  'col2': ['4', '7', None, '8', None, None, '11',None], 
  'col3': ['9', None, '3', '8', None,None, None,'12'],
  'col4': ['abc', 'def', 'ghi', 'jkl', None,'mno', 'pqr',None],
  'col5': ['123', None, '456', '789', None,None, None,'012'],
  }

df = pd.DataFrame(di, dtype=object)

输入数据框:

embedded image

必需的Ouput数据框:

embedded image

我使用的方法:

df.loc[~df.col1.isnull() & df.col2.isnull() & df.col3.isnull(), ['col2','col3']] = 'Hello'

df.loc[df.col1.isnull() & ~df.col2.isnull() & df.col3.isnull(), ['col1','col3']] = 'Hello'

df.loc[df.col1.isnull() & df.col2.isnull() & ~df.col3.isnull(), ['col1','col2']] = 'Hello'

df.loc[~df.col1.isnull() & ~df.col2.isnull() & df.col3.isnull(), ['col3']] = 'Hello'

df.loc[df.col1.isnull() & ~df.col2.isnull() & ~df.col3.isnull(), ['col1']] = 'Hello'

df.loc[~df.col1.isnull() & df.col2.isnull() & ~df.col3.isnull(), ['col2']] = 'Hello'

4 个答案:

答案 0 :(得分:0)

我不确定我是否理解正确,但是如果您想用“ Hello”替换所有None值,则可以简单地使用:

df.fillna("Hello")

答案 1 :(得分:0)

df.fillna('Hello', inplace=True)。明智地使用inplace,仔细阅读。

答案 2 :(得分:0)

IIUC:

您要填充空值,除非它们均为行的空值。

m = df.isna().all(1)
df.fillna(‘Hello’).mask(m, df, axis=0)

从我的手机中获得答案

答案 3 :(得分:0)

如果您只想将其应用于这三列:

cols = ['col1','col2','col3']
df[cols] = df[df.loc[:,cols].notnull().any(axis=1)][cols].fillna('Hello')
df = df.replace(dict({np.nan: None}))

print(df) 
    col1   col2   col3  col4  col5
0      1      4      9   abc   123
1      2      7  Hello   def  None
2      5  Hello      3   ghi   456
3  Hello      8      8   jkl   789
4   None   None   None  None  None
5     10  Hello  Hello   mno  None
6  Hello     11  Hello   pqr  None
7  Hello  Hello     12  None   012