如何在元组

时间:2017-10-15 09:31:50

标签: python python-3.x pandas

如果列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'。在这种情况下我可以使用哪些其他方法?

1 个答案:

答案 0 :(得分:3)

首先使用带有&isnull函数的1的链式条件创建布尔蒙版。

然后是添加mask = raw_data['a'].notnull() & raw_data['b'].isnull() 的更多可能解决方案 - notnullmaskloc

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