Reputation: 1185
I have a table looks that:
0 1
0 2760023 XXXXXXXXYYYY111
1 2760024 XXXXXXXXYYYY112
2 2760042 XXXXXXXXYYYY113
3 2760011 XXXXXXXXYYYY114
4 2760041 XXXXXXXXYYYY115
5 2760012 XXXXXXXXYYYY116
6 2760033 XXXXXXXXYYYY117
No headers. I need to create simple dict:
dict = {2760023:XXXXXXXXYYYY111,
2760024:XXXXXXXXYYYY112... etc.}
I read a lot of post on SO and docs, but the result for me is wrong...
coz if I use a to_dict()
(no matter what argument), as someone describe here:
26716616/convert-a-pandas-dataframe-to-a-dictionary
I got a not simple dict but:
{0: {0: 2760023,
1: 2760024,
2: 2760042,
3: 2760011,
4: 2760041,
5: 2760012,
6: 2760033},
1: {0: 'XXXXXXXXYYYY111',
1: 'XXXXXXXXYYYY112',
2: 'XXXXXXXXYYYY113',
3: 'XXXXXXXXYYYY114',
4: 'XXXXXXXXYYYY115',
5: 'XXXXXXXXYYYY116',
6: 'XXXXXXXXYYYY117'}}
So it kinda lists in the list? Can someone tell me what I did wrong?
P.S. table hase a data.frame type
Upvotes: 0
Views: 47
Reputation: 2032
There is other way also:
{row[0]:row[1] for idx, row in df.iterrows()}
With timeit, we have below for all solutions:
In [6]: %timeit {row[0]:row[1] for idx, row in df.iterrows()}
629 µs ± 56.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [7]: %timeit dict(df.values)
44.1 µs ± 2.78 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [8]: %timeit df.set_index('0').to_dict()['1']
347 µs ± 18.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Upvotes: 1
Reputation: 75100
If you just have 2 columns, you can also do:
dict(df.values)
{2760023: 'XXXXXXXXYYYY111',
2760024: 'XXXXXXXXYYYY112',
2760042: 'XXXXXXXXYYYY113',
2760011: 'XXXXXXXXYYYY114',
2760041: 'XXXXXXXXYYYY115',
2760012: 'XXXXXXXXYYYY116',
2760033: 'XXXXXXXXYYYY117'}
Upvotes: 1
Reputation: 71610
Don't use any arguments for to_dict
:
>>> df.set_index('0').to_dict()['1']
{2760023: 'XXXXXXXXYYYY111', 2760024: 'XXXXXXXXYYYY112', 2760042: 'XXXXXXXXYYYY113', 2760011: 'XXXXXXXXYYYY114', 2760041: 'XXXXXXXXYYYY115', 2760012: 'XXXXXXXXYYYY116', 2760033: 'XXXXXXXXYYYY117'}
>>>
Upvotes: 1