代码之家  ›  专栏  ›  技术社区  ›  toto_tico

如何使用存储在两个列表/向量/序列中的“类坐标”索引更改数据帧单元格值?

  •  6
  • toto_tico  · 技术社区  · 6 年前

    如果之前有人问过这个问题,我很抱歉,不知为什么我找不到答案。

    假设我有两个值列表:

    rows = [0,1,2]
    cols = [0,2,3]
    

    我想用这些坐标来改变 dataframe 不用循环。

    data = np.ones((4,4))
    data[rows, cols] = np.nan
    
    array([[nan,  1.,  1.,  1.],
          [ 1.,  1., nan,  1.],
          [ 1.,  1.,  1., nan],
          [ 1.,  1.,  1.,  1.]])
    

    但在熊猫身上,我似乎陷入了一个循环:

    df = pd.DataFrame(np.ones((4,4)))
    for _r, _c in zip(rows, cols): 
        df.iat[_r, _c] = np.nan
    

    有没有一种方法可以使用列出类似于坐标索引的向量来直接修改熊猫中的单元格?


    请注意 答案是不要使用iloc ,这将选择整行和整列的交集。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Yuca    6 年前

    很简单!利用熊猫是建立在 numpy 使用 DataFrame.values

    df.values[rows, cols] = np.nan
    

         0    1    2    3
    0  NaN  1.0  1.0  1.0
    1  1.0  1.0  NaN  1.0
    2  1.0  1.0  1.0  NaN
    3  1.0  1.0  1.0  1.0