我想在最后创建一个如下所示的列表:
[
{'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))
但我得到的结果是: TypeError:字符串索引必须是整数
任何人都可以指出(1)我做错了什么,(2)如何修复它?
答案 0 :(得分:1)
您可以使用:
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}]
答案 1 :(得分:1)
您需要将.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': 'IE', 'y': 203},
{'name': 'FireFox', 'y': 25},
{'name': 'Safari', 'y': 305},
{'name': 'Opera', 'y': 15},
{'name': 'QQ', 'y': 132}]
这样原来的df
也不会受到影响。