Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换屏蔽数据帧内的NaN_Python_Pandas - Fatal编程技术网

Python 替换屏蔽数据帧内的NaN

Python 替换屏蔽数据帧内的NaN,python,pandas,Python,Pandas,这将创建一个新列c,其中mask1为False,列a中mask1为True。现在我在不同的条件下将b添加到c some_dict = {'a': [1,2,3,4], 'b': [5,6,7,8],} df = pd.DataFrame(some_dict) mask1 = pd.Series([False, True, False, True]) df['c'] = df.loc[mask1, 'a'] 但是,这会将所有值都设置为NaN。我猜这是因为NaN+0和0+NaN都等于NaN。我试图

这将创建一个新列
c
,其中
mask1
False
,列
a
mask1
True
。现在我在不同的条件下将
b
添加到
c

some_dict = {'a': [1,2,3,4], 'b': [5,6,7,8],}
df = pd.DataFrame(some_dict)
mask1 = pd.Series([False, True, False, True])
df['c'] = df.loc[mask1, 'a']
但是,这会将所有值都设置为NaN。我猜这是因为
NaN+0
0+NaN
都等于
NaN
。我试图通过写作来解决这个问题

mask2 = pd.Series([True, False, False, False])
df['c'] += df.loc[mask2, 'b']

为什么通过
fillna()
NaN
替换为
0
不起作用?

如果检查如何仅为不匹配的行添加缺少的值-掩码中的假值:

df['c'] = df.loc[mask1, 'a'].fillna(0)
df['c'] = df.loc[mask2, 'b'].fillna(0)
因此,如果要替换NaN,则不存在缺失值,因此无法执行:

print (df.loc[mask1, 'a'])
1    2
3    4
Name: a, dtype: int64
如果指定给列,则也必须创建不匹配的值-因为不知道应该创建什么
NaN
s:

print (df.loc[mask1, 'a'].fillna(0))
1    2
3    4
Name: a, dtype: int64
另一种选择是:

总而言之:

df['c'] = df['a'].where(mask1, 0)
print (df)
   a  b  c
0  1  5  0
1  2  6  2
2  3  7  0
3  4  8  4
另一个想法是使用
fill\u value=0

some_dict = {'a': [1,2,3,4], 'b': [5,6,7,8],}
df = pd.DataFrame(some_dict)
mask1 = pd.Series([False, True, False, True])
df['c'] = np.where(mask1, df['a'], 0)

mask2 = pd.Series([True, False, False, False])
df['c'] += np.where(mask2, df['b'], 0)

print (df)
   a  b  c
0  1  5  5
1  2  6  2
2  3  7  0
3  4  8  4

如果检查如何仅为不匹配的行添加缺少的值-掩码中的假值:

df['c'] = df.loc[mask1, 'a'].fillna(0)
df['c'] = df.loc[mask2, 'b'].fillna(0)
因此,如果要替换NaN,则不存在缺失值,因此无法执行:

print (df.loc[mask1, 'a'])
1    2
3    4
Name: a, dtype: int64
如果指定给列,则也必须创建不匹配的值-因为不知道应该创建什么
NaN
s:

print (df.loc[mask1, 'a'].fillna(0))
1    2
3    4
Name: a, dtype: int64
另一种选择是:

总而言之:

df['c'] = df['a'].where(mask1, 0)
print (df)
   a  b  c
0  1  5  0
1  2  6  2
2  3  7  0
3  4  8  4
另一个想法是使用
fill\u value=0

some_dict = {'a': [1,2,3,4], 'b': [5,6,7,8],}
df = pd.DataFrame(some_dict)
mask1 = pd.Series([False, True, False, True])
df['c'] = np.where(mask1, df['a'], 0)

mask2 = pd.Series([True, False, False, False])
df['c'] += np.where(mask2, df['b'], 0)

print (df)
   a  b  c
0  1  5  5
1  2  6  2
2  3  7  0
3  4  8  4

尝试始终将左值的索引与右值的索引相匹配。否则,熊猫会在进行手术前尽最大努力重新编制这两个项目的索引

此外,在进行步幅分配之前,始终将新列显式设置为您选择的某个默认值,例如0(它还将为您提供正确的
dtype

因此,具体而言:

some_dict = {'a': [1,2,3,4], 'b': [5,6,7,8],}
df = pd.DataFrame(some_dict)
mask1 = pd.Series([False, True, False, True])
df['c'] = df.loc[mask1, 'a']
print (df)
   a  b    c
0  1  5  NaN
1  2  6  2.0
2  3  7  NaN
3  4  8  4.0

mask2 = pd.Series([True, False, False, False])
df['c'] = df['c'].add(df.loc[mask2, 'b'], fill_value=0)
    
print (df)
   a  b    c
0  1  5  5.0
1  2  6  2.0
2  3  7  NaN
3  4  8  4.0

尝试始终将左值的索引与右值的索引相匹配。否则,熊猫会在进行手术前尽最大努力重新编制这两个项目的索引

此外,在进行步幅分配之前,始终将新列显式设置为您选择的某个默认值,例如0(它还将为您提供正确的
dtype

因此,具体而言:

some_dict = {'a': [1,2,3,4], 'b': [5,6,7,8],}
df = pd.DataFrame(some_dict)
mask1 = pd.Series([False, True, False, True])
df['c'] = df.loc[mask1, 'a']
print (df)
   a  b    c
0  1  5  NaN
1  2  6  2.0
2  3  7  NaN
3  4  8  4.0

mask2 = pd.Series([True, False, False, False])
df['c'] = df['c'].add(df.loc[mask2, 'b'], fill_value=0)
    
print (df)
   a  b    c
0  1  5  5.0
1  2  6  2.0
2  3  7  NaN
3  4  8  4.0

我希望将列
b
中的值添加到列
c
,但仅当
mask2
为true时。如果
为False,则只需添加任何内容。@armara-
则只需添加任何内容。
-而
中的任何内容都不是
NaN
;)我想你需要添加
0
?是的,我不是指添加
NaN
,我是指在
0
中不添加任何内容,尝试始终将左值的索引与右值的索引相匹配。否则,熊猫会在进行手术前尽最大努力重新编制这两个项目的索引。请参阅我的答案,以获得一种简洁而正确的方法。我希望将
b
列中的值添加到
c
列中,但仅当
mask2
为真时。如果
为False,则只需添加任何内容。@armara-
则只需添加任何内容。
-而
中的任何内容都不是
NaN
;)我想你需要添加
0
?是的,我不是指添加
NaN
,我是指在
0
中不添加任何内容,尝试始终将左值的索引与右值的索引相匹配。否则,熊猫会在进行手术前尽最大努力重新编制这两个项目的索引。请参阅我的答案,以获得一种简洁而恰当的方法。谢谢!:D
np.
有魔力的地方,熊猫中没有等价的功能吗?@armara-你可以使用
df['c']=df['a']。其中(mask1,0)
。顺便说一句,如果需要
+NaN
值,则需要
.add
,添加到答案的末尾。@armara当然:@PierreD-或此处-处理一列谢谢!:D
np.
有魔力的地方,熊猫中没有等价的功能吗?@armara-你可以使用
df['c']=df['a']。其中(mask1,0)
。顺便说一句,如果需要
+NaN
值,则需要
.add
,添加到答案末尾。@armara当然:@PierreD-或here-处理一列