代码之家  ›  专栏  ›  技术社区  ›  adhg veen

从数据帧到具有类型错误的列表:字符串索引必须是整数

  •  0
  • adhg veen  · 技术社区  · 6 年前

    [
        {'name': 'Chrome', 'y': 550},
        {'name': 'IE', 'y': 203},
    ]
    

    df = pd.DataFrame({"CATEGORY":["Chrome","IE","FireFox","Safari","Opera","QQ"],"Users":[550,203,25,305,15,132]})
    

    为了达到这个目的,我试着这样做:

    list(map(lambda row: {'name': df[row['CATEGORY']], 'y': row['Users']}, df))
    

    类型错误:字符串索引必须是整数

    2 回复  |  直到 6 年前
        1
  •  1
  •   akilat90    6 年前

    df.columns = ['name', 'y'] # change the column names to the ones that you want
    df.to_dict('records') # this returns a list of dictionaries for each row
    
    [{'name': 'Chrome', 'y': 550},
    {'name': 'IE', 'y': 203},
     {'name': 'FireFox', 'y': 25},
     {'name': 'Safari', 'y': 305},
     {'name': 'Opera', 'y': 15},
     {'name': 'QQ', 'y': 132}]
    
        2
  •  1
  •   harvpan    6 年前

    .apply() axis=1

    list(df.apply(lambda x: {'name': x['CATEGORY'], 'y': x['Users']}, axis=1))
    

    输出:

    [{'name': 'Chrome', 'y': 550},
     {'name': 'IE', 'y': 203},
     {'name': 'FireFox', 'y': 25},
     {'name': 'Safari', 'y': 305},
     {'name': 'Opera', 'y': 15},
     {'name': 'QQ', 'y': 132}]
    

    理想的 to_dict() 如下:

    df.rename(columns={'CATEGORY': 'name', 'Users': 'y'}).to_dict(orient='records')
    

    ['name':'chrome'、'y':550,
    'name':'firefox'、'y':25,
    

    df 也不会受到影响。