Car*_*.py 0 python arrays dictionary numpy python-2.7
我是一个新的Python 2.7用户.我最近了解了numpy数组,现在我正在学习字典.如果我的语法不正确,请原谅.
假设我们有一本字典:
dict1 = {'Ann': {'dogs': '3', 'cats': '4'},
'Bob': {'dogs': '5', 'cats': '6'},
'Chris': {'dogs': '7', 'cats': '8'},
'Dan': {'dogs': '9', 'cats': '10'}}
Run Code Online (Sandbox Code Playgroud)
键是dog和cat,值是每个安,鲍勃,克里斯和丹的数字.
我想反转我的字典的值组件.我知道我可以通过使用转换为列表dict1.values(),然后转换为数组,然后转换回字典,但这似乎很乏味.有没有办法让我的值组件成为一个numpy数组并保持关键组件的方式?
如果您只需要将值作为数组,则可以使用它pandas来帮助转换为numpy数组.或者,您可以使用它pandas来满足您的要求.Pandas提供了一个建立在其上的数据分析库(思考程序化电子表格)numpy.
要转换为numpy数组以进行进一步处理:
>>> import pandas as pd
>>> import numpy as np
>>> pd.DataFrame(dict1).T
cats dogs
Ann 4 3
Bob 6 5
Chris 8 7
Dan 10 9
>>> pd.DataFrame(dict1).T.as_matrix()
array([['4', '3'],
['6', '5'],
['8', '7'],
['10', '9']], dtype=object)
Run Code Online (Sandbox Code Playgroud)
根据注释更新,使用pandas反转所有值:
>>> pd.DataFrame(dict1).applymap(lambda x: 1/float(x))
Ann Bob Chris Dan
cats 0.250000 0.166667 0.125000 0.100000
dogs 0.333333 0.200000 0.142857 0.111111
Run Code Online (Sandbox Code Playgroud)
或者导致字典:
>>> pd.DataFrame(dict1).applymap(lambda x: 1/float(x)).to_dict()
{'Ann': {'cats': 0.25, 'dogs': 0.33333333333333331},
'Bob': {'cats': 0.16666666666666666, 'dogs': 0.20000000000000001},
'Chris': {'cats': 0.125, 'dogs': 0.14285714285714285},
'Dan': {'cats': 0.10000000000000001, 'dogs': 0.1111111111111111}}
Run Code Online (Sandbox Code Playgroud)