Python 从dataFrame到带有TypeError的列表:字符串索引必须是整数
我想创建一个列表,该列表的结尾如下所示:Python 从dataFrame到带有TypeError的列表:字符串索引必须是整数,python,python-3.x,pandas,lambda,Python,Python 3.x,Pandas,Lambda,我想创建一个列表,该列表的结尾如下所示: [ {'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': '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)如何纠正它吗 您可以使用:
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}]
您可以使用:
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}]
您需要使用withaxis=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}]
[{'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.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}]
[{'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
也不会受到影响 您需要与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}]
[{'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.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}]
[{'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
也不会受到影响 你真的想这样做吗?或者你可以用一个内置的方法来做吗?关于您的错误:df[row['CATEGORY']]
无效。请参阅上的索引文档,您真的希望这样做,还是可以使用内置方法这样做?关于您的错误:df[row['CATEGORY']]
无效。请参阅和@adhg上的索引文档,很高兴,我可以提供帮助。考虑接受这个答案。“阿德格,很高兴,我能帮上忙。考虑接受答案。