我已经将pandas.core.series.Series转换为字典,数据是每个州中前3个县的人口,并且有一个令人讨厌的索引操作符,我无法摆脱它。字典采用以下形式:
{('Alabama', 37): 660367.0, ('Alabama', 45): 353089.0,
('Alabama', 49): 415395.0, ('Alaska', 71): 298695.0,
('Alaska', 76): 99631.0, ('Alaska', 85): 101095.0,
('Arizona', 106): 4167947.0, ('Arizona', 109): 1010025.0,
('Arizona', 110): 406584.0, ('Arkansas', 118): 249672.0,
('Arkansas', 174): 392664.0, ('Arkansas', 186): 225477.0, ...
我希望将其转换为:{('Alabama', 660367.0), ('Alabama', 353089.0), ...
我对编码很新,希望这很容易解决。我无法弄清楚是否有更好的方法来转换大熊猫系列,这首先避免了额外的数据(我只是使用data=dict(data)
),或者可能是通过字典的for循环...?
答案 0 :(得分:0)
您可以使用列表推导(或类似)轻松转换输出数据。如果您的数据位于data
,则这些行中的任何一行都会执行您实际要求的操作,具体取决于您想要的数据类型:
out = [(key[0], value) for key, value in data.items()]
out = tuple((key[0], value) for key, value in data.items())
out = set((key[0], value) for key, value in data.items())
# In Python 2.7+ this is the same as the above
out = {(key[0], value) for key, value in data.items()}
但它们都不是与原作不同的字典。但这是因为对于字典,您需要为每个值使用唯一键,但状态名称不是唯一的。
基本思想是迭代每个项目并使用状态名称(这是密钥中的第一个条目,因此key[0]
),然后将填充添加到它(仅{{1} }})。
现在你给出的那个,value
实际上是一个集合(至少那是Python 3中的表示,在Python 2中这不是一个有效的表示法)。集合没有顺序,每个条目都是唯一的,因此它将保存两个具有相同大小的县,只有一个条目。
如果你想要一个字典,你需要确定密钥应该是什么以及密钥的值是什么。
答案 1 :(得分:0)
有更好的方法可以将其转换为您想要的DataFrame对象,但需要进行快速而肮脏的修复......
如果你真的想要这样:{('Alabama', 660367.0), ('Alabama', 353089.0), ... }
你可以这样做(假设是python2.7):
(我假设我们有一个变量d
即字典。)
new_d = {(k[0], v) for k, v in d.iteritems()}
print new_d
=>
{('Alabama', 353089.0),
('Alabama', 415395.0),
('Alabama', 660367.0),
('Alaska', 298695.0)}
...
这实际上是一个集合。