熊猫面具查询

时间:2020-05-29 12:44:18

标签: python pandas

我在面具中查询-我的X定义如下

X = pd.DataFrame({'a':[1,250,480],
               'b':[60,51,101],
               'c':[15,689,1],
               'd':[1,1,1],
               'e':[2,2,2]})

给出我的X如下

    a   b   c   d   e
0   1   60  15  1   2
1   250 51  689 1   2
2   480 101 1   1   2

当我创建一个遮罩时 x['d'] =x.mask(x['c'] >100, "b")

我得到以下输出。

    a   b   c   d   e
0   1   60  15  1   2
1   250 51  689 b   2
2   480 101 1   480 2

我不知道d列中的480是哪里来的。

现在x ['d']现在是[1 b 480] b很清楚,但是480来自哪里?我想我缺少有关口罩工作原理的东西

谢谢。

1 个答案:

答案 0 :(得分:1)

如果将DataFrame分配给一个列,而将DataFrame的第一列分配给它,则看起来是设计使然。


它使用第一列,就像未指定的列一样-在这里使用DataFrame.mask,因为x传递给maskx之后未指定列名):< / p>

#replaced to `b` value all columns in df by mask x['c'] >100       
print (x.mask(x['c'] >100, "b"))
      ^^^ 
     a    b   c  d  e
0    1   60  15  1  2
1    b    b   b  b  b
2  480  101   1  1  2

如果分配给某列使用第一列:

x['d'] = x.mask(x['c'] >100, "b")
        ^^^ 
print (x)
     a    b    c    d  e
0    1   60   15    1  2
1  250   51  689    b  2
2  480  101    1  480  2

测试删除了第一列a,然后分配了第一列,这里b

x = pd.DataFrame({ 'b':[60,51,101],
               'c':[15,689,1],
               'd':[1,1,1],
               'e':[2,2,2]})

print (x.mask(x['c'] >100, "b"))
      ^^^ 
     b   c  d  e
0   60  15  1  2
1    b   b  b  b
2  101   1  1  2

x['d'] = x.mask(x['c'] >100, "b")
        ^^^ 
print (x)
     b    c    d  e
0   60   15   60  2
1   51  689    b  2
2  101    1  101  2

如果无条件地将DataFrame分配给列,则行为相同:

x['d'] = x
        ^^^ 
print (x)
     a    b    c    d  e
0    1   60   15    1  2
1  250   51  689  250  2
2  480  101    1  480  2

如果要分配给2列,则会正确引发错误:

x[['d','e']] = x.mask(x['c'] >100, "b")
              ^^^ 
print (x)

ValueError:列的长度必须与键的长度相同

分配了具有Series.mask-Series,(列)的指定列的正确方式,因为传递了x之后的指定列名Series,此处为{{1} },x['d']

x['b']