Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从dataFrame到带有TypeError的列表:字符串索引必须是整数_Python_Python 3.x_Pandas_Lambda - Fatal编程技术网

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}]
您需要使用with
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
也不会受到影响

您需要与
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上的索引文档,很高兴,我可以提供帮助。考虑接受这个答案。“阿德格,很高兴,我能帮上忙。考虑接受答案。