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

pandas根据字符串添加一列浮点数

  •  0
  • proximacentauri  · 技术社区  · 6 年前

    我正在尝试根据pandas数据框中的名称绘制带有颜色的matplotlib绘图。因此在x,y绘图中不同的名称点有不同的颜色。

    数据帧:

        id  x   y   Names   
    0   MAC004524   29.137983   11.864633   ACORN-M     
    1   MAC004525   28.14       11.80       ACORN-M 
    2   MAC004526   24.14       12.80       ACORN-C 
    ....
    

    代码:

    names = set(df['Names'])
    colors = list(cmap(np.linspace(0, 1, len(names))))
    df['color']=0
    for a, c in zip(names, colors):
        mask = df.loc[df['Names'] == a]
        df.loc[mask, 'color'] = c
    #but get an error here KeyError: "[('i', 'd') ('x',) ('y',) ('A', 'c', 'o', 'r', 'n')\n ('A', 'c', 'o', 'r', 'n', '_', 'g', 'r', 'o', 'u', 'p', 'e', 'd')\n ('c', 'o', 'l', 'o', 'r')] not in index"
    

    那么我想画

    x = df['x']
    y = df['y']
    c= df['color']
    plt.scatter(x, y, c=c, s=1)
    

    所需DF:

        id  x   y   Names    color
    0   MAC004524   29.137983   11.864633   ACORN-M    [0.267004 0.004874 0.329415 1.      ] 
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Jondiedoop    6 年前

    你调查过海伯恩的阴谋吗?您可以立即从原始数据帧进行绘图:

    import seaborn as sns
    sns.scatterplot(x='x', y='y', hue='Names', data=df)
    
        2
  •  1
  •   Márcio Coelho    6 年前

    问题应该是试图在单元格中放置列表。如图所示 here ,您应该使用.at而不是.loc。

    可能不是最有效的方法,但它可以完成工作:

    for a, c in zip(names, colors):
        mask = df[df['Names'] == a].index
        for value in mask:
            df.at[value, 'color'] = c
    

    我添加了索引,并对其每个值进行迭代,用指定的颜色替换,因为我还没有找到向.at命令的行索引添加多个值的方法。