我在pandas中有一个数据帧,如下所示:
import pandas as pd
import numpy as np
df = pd.DataFrame({'name' : pd.Series(['Alex', 'John', 'Christopher', 'Dwayne']),
'value' : pd.Series([1., 2., 3., 4.]),
'new_value' : pd.Series([np.NaN, 4, 5, 10])})
df
Out[1]:
name value new_value
0 Alex 1.0 NaN
1 John 2.0 4.0
2 Christopher 3.0 5.0
3 Dwayne 4.0 10.0
现在我想更新value列,如果新值不是NaN
。我进行了搜索,找到了这个答案:Efficient way to update column value for subset of rows on Pandas DataFrame?,这使我得到了以下(正确的)结构:
df.loc[~df.new_value.isnull(), 'value'] = df.new_value
我的问题是,这是如何工作的?为什么分配的右侧也会被loc过滤
~df.new_value.isnull()
将在~
具有True
{True
变为False
和False
变为True
)后提供与数据相反的数据这些值具有索引。因此,您通过刚刚筛选的索引(第一个参数)定位
df
,并且确保只选择value
的值相关问题 更多 >
编程相关推荐