如果列a在同一行中不是NaN,我尝试将列b中的所有NaN元素更改为1。例如:a == 1 b == NaN,将b更改为1.这是我的代码。
raw_data['b'] = ((raw_data['a'],raw_data['b']).apply(condition))
def condition(a,b):
if a != None and b == None:
return 1
我得到了一个AttributeError:'tuple'对象没有属性'apply'。在这种情况下我可以使用哪些其他方法?
答案 0 :(得分:3)
首先使用带有&
和isnull
函数的1
的链式条件创建布尔蒙版。
然后是添加mask = raw_data['a'].notnull() & raw_data['b'].isnull()
的更多可能解决方案 - notnull
,mask
或loc
:
raw_data['b'] = raw_data['b'].mask(mask, 1)
raw_data.loc[mask, 'b'] = 1
或者:
raw_data['b'] = np.where(mask, 1,raw_data['b'])
或者:
raw_data = pd.DataFrame({
'a': [1,np.nan, np.nan],
'b': [np.nan, np.nan,2]
})
print (raw_data)
a b
0 1.0 NaN
1 NaN NaN
2 NaN 2.0
mask = raw_data['a'].notnull() & raw_data['b'].isnull()
print (mask)
0 True
1 False
2 False
dtype: bool
raw_data.loc[mask, 'b'] = 1
print (raw_data)
a b
0 1.0 1.0
1 NaN NaN
2 NaN 2.0
样品:
axis=1
编辑:
如果想要使用自定义函数(如果更多数据真的很慢)需要numpy.where
def condition(x):
if pd.notnull(x.a) and pd.isnull(x.b):
return 1
else:
return x.b
raw_data['b'] = raw_data.apply(condition, axis=1)
print (raw_data)
a b
0 1.0 1.0
1 NaN NaN
2 NaN 2.0
进行行处理:
objects_xxx.json.gz