我有一个dataframe,其中包含两个列,我想将它们转换成一个字典,作为映射使用。
我尝试过多种转换方法,但我的字典值总是以错误的顺序出现。我的python版本是3,Pandas版本是0.24.2。
这就是我的dataframe的前几行的样子:
geozip.head()
Out[30]:
Geoid ZIP
0 100100 36276
1 100124 36310
2 100460 35005
3 100460 35062
4 100460 35214我希望我的字典看起来像这样:
{100100: 36276,
100124: 36310,
100460: 35005,
100460: 35062,
100460: 35214,...}但是,我的输出却给出了值的错误顺序。
{100100: 98520,
100124: 36310,
100460: 57520,
100484: 35540,
100676: 19018,
100820: 57311,
100988: 15483,
101132: 36861,...}我先试了一下,但字典出得乱七八糟:
geozipmap = geozip.set_index('Geoid')['ZIP'].to_dict()然后,我尝试先将这两列转换为list,然后转换为字典,但也出现了同样的问题:
geoid = geozip.Geoid.tolist()
zipcode = geozip.ZIP.tolist()
geozipmap = dict(zip(geoid, zipcode))我试着转换到OrderedDict,但这也不起作用。然后我试过:
geozipmap = {k: v for k, v in zip(geoid, zipcode)}我也试过:
geozipmap = {}
for index, g in enumerate(geoid):
geozipmap[geoid[index]] = zipcode[index] 我也尝试过建议的答案:panda dataframe to ordered dictionary
这些都不管用。真的不知道这是怎么回事?
发布于 2019-07-30 05:25:33
尝试这个default_dict,如果相同的key有多个值,您可以将它们作为列表提供
from collections import defaultdict
df =pd.DataFrame(data={"Geoid":[100100,100124,100460,100460,100460],
"ZIP":[36276,36310,35005,35062,35214]})
data_dict = defaultdict(list)
for k,v in zip(df['Geoid'],df['ZIP']):
data_dict[k].append(v)
print(data_dict)defaultdict(<class 'list'>, {100100: [36276], 100124: [36310], 100460: [35005, 35062, 35214]})发布于 2019-07-30 05:00:49
这对你有用吗?
dfG = df['Geoid'].values
dfZ = df['ZIP'].values
for g , z in zip (dfG,dfZ):
print(str(g)+':'+str(z))这给出了如下的输出(但值是字符串)
100100:36276
100124:36310
100460:35005
100460:35062
100460:35214
https://stackoverflow.com/questions/57264388
复制相似问题