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

用熊猫的数据填充矩阵。数据帧,跳过NaN

  •  0
  • Jan  · 技术社区  · 7 年前

    我想填充矩阵 ref 使用 pd.DataFrame xxx 但是跳过 NaN .

    print xxx
    OUT >> 
       intensity name  rowtype1  rowtype2
    0        100    A         1       4.0
    1        200    A         2       NaN
    2        300    B         3       5.0
    

    然后我填充矩阵 ref[rowtype,col] = intensity 我有2个 rowtype .

    ref = np.zeros(shape=(7,4))
    for idx, inte, name, r1, r2 in xxx.itertuples():
        ref[r1,idx] = inte
        ref[r2,idx] = inte # error because of NaN in rowtype2
    
    print ref
    

    我怎么能跳过 在这里 我知道一种使用方法 drop.na() 但它必须创建新的数据帧 rowtype2 intensity . 我想有一个快速简单的方式,就像刚刚跳过 具有 intensity = 200 到下一个 rowtype2 = 5 具有 intensity = 300 .


    其他信息:

    1) 下面是如何创建 xxx个

    prot = ['A','A','B']
    calc_m = [1,2,3]
    calc_m2 = [4, np.nan,5]
    inte = [100,200,300]
    xxx = pd.DataFrame({'name' : pd.Series(prot),
                        'rowtype1': pd.Series(calc_m),
                        'rowtype2': pd.Series(calc_m2),
                        'intensity': pd.Series(inte)
                        })
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   DJK    7 年前

    您可以使用以下选项: melt ,然后设置 ref 使用numpy索引与使用for循环

    set = xxx.reset_index().melt(['intensity','index'],['rowtype1','rowtype2']).dropna()
    
    ref[set.value.astype(int).values,set['index'].values] = set.intensity.values
    

    这给了你

    array([[   0.,    0.,    0.,    0.],
           [ 100.,    0.,    0.,    0.],
           [   0.,  200.,    0.,    0.],
           [   0.,    0.,  300.,    0.],
           [ 100.,    0.,    0.,    0.],
           [   0.,    0.,  300.,    0.],
           [   0.,    0.,    0.,    0.]])
    
        2
  •  0
  •   n3utrino    7 年前

    我不确定我是否完全理解您在寻找什么行为,但pandas dropna()命令有“subset”参数。。。例如,删除rowtype2列中具有NaN的所有行可以使用

    xxx.dropna(subset=['rowtype2'],inplace=True)
    

    这样,您将只在rowtype2列中删除带有NaN的行。