代码之家  ›  专栏  ›  技术社区  ›  YQ.Wang

通过布尔向量指定索引值得到混乱的结果

  •  0
  • YQ.Wang  · 技术社区  · 7 年前

    以下是数据框:

    import pandas as pd
    df = pd.DataFrame({'a':[2,5,6,1,2,7,2,0,2,4]})
    

    我想替换大于3的元素,所以我这样做:

    df['a'][df['a']>3] = [9,99,999,9999]
    

    我得到了错误的结果:

         a
    0    2
    1   99
    2  999
    3    1
    4    2
    5   99
    6    2
    7    0
    8    2
    9   99
    

    我想要的结果是:

          a
    0     2
    1     9
    2    99
    3     1
    4     2
    5   999
    6     2
    7     0
    8     2
    9  9999
    

    但是,当替换为字符串时,结果似乎是正确的:

    df['a'][df['a']>3] = ['a','b','c','d']
       a
    0  2
    1  a
    2  b
    3  1
    4  2
    5  c
    6  2
    7  0
    8  2
    9  d
    

    为什么会发生这种情况,我如何才能纠正?谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   jpp    7 年前

    Don't use chained indexing . 尝试以下操作:

    df.loc[df['a']>3, 'a'] = [9,99,999,9999]
    
    #       a
    # 0     2
    # 1     9
    # 2    99
    # 3     1
    # 4     2
    # 5   999
    # 6     2
    # 7     0
    # 8     2
    # 9  9999