Mam dwie kolumny dataframe i zamierzam przekonwertować ją na słownik Pythona - pierwsza kolumna będzie kluczem, a druga będzie wartością. Z góry dziękuję.
Ramka danych:
id value
0 0 10.2
1 1 5.7
2 2 7.4
python
dictionary
pandas
perygeum
źródło
źródło
Odpowiedzi:
Zobacz dokumentację dla
to_dict
. Możesz go używać w ten sposób:A jeśli masz tylko jedną kolumnę, aby uniknąć nazwy kolumny, jest to również poziom w dyktcie (w rzeczywistości w tym przypadku używasz
Series.to_dict()
):źródło
>>> ptest = p.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value']) >>> ptest.set_index('id')['value'].to_dict()
źródło
Jeśli chcesz w prosty sposób zachować duplikaty, możesz użyć
groupby
:źródło
Odpowiedzi jorisa w tym wątku i punchagana w zduplikowanym wątku są bardzo eleganckie, jednak nie dadzą poprawnych wyników, jeśli kolumna użyta na klucze zawiera zduplikowaną wartość.
Na przykład:
Jeśli masz zduplikowane wpisy i nie chcesz ich zgubić, możesz użyć tego brzydkiego, ale działającego kodu:
źródło
mydict = defaultdict(list)\n for (key, val) in ptest[["id", "value"]].itertuples(index=False):\n mydict[key].append(val)
Najprostsze rozwiązanie:
Przykład:
Jeśli masz wiele wartości, takich jak val1, val2, val3 itp. I chcesz je mieć jako listy, użyj poniższego kodu:
źródło
records
znaczy?records
tutaj znaczy‘records’ : list like [{column -> value}, … , {column -> value}]
Zobacz pandas.pydata.org/pandas-docs/stable/reference/api/…w niektórych wersjach poniższy kod może nie działać
więc wyraź to
Zauważ, że użyłem id_, ponieważ słowo id jest słowem zastrzeżonym
źródło
Możesz użyć `` dyktowania ze zrozumieniem ''
źródło
Kolejne (nieco krótsze) rozwiązanie pozwalające uniknąć utraty zduplikowanych wpisów:
źródło
Potrzebujesz listy jako wartości słownikowej. Ten kod załatwi sprawę.
źródło
Znalazłem to pytanie, próbując utworzyć słownik z trzech kolumn ramki danych pandy. W moim przypadku ramka danych ma kolumny A, B i C (powiedzmy, że A i B to współrzędne geograficzne długości i szerokości geograficznej, a C to region kraju / stan / itp., Co mniej więcej tak jest).
Chciałem mieć słownik z każdą parą wartości A, B (klucz słownika) pasującą do wartości C (wartość słownika) w odpowiednim wierszu (każda para wartości A, B jest unikalna ze względu na poprzednie filtrowanie, ale tak jest można mieć taką samą wartość C dla różnych par wartości A, B w tym kontekście), więc zrobiłem:
Używanie pand to_dict () działa również:
(żadna z kolumn A ani B nie była używana jako indeks przed wykonaniem wiersza tworzącego słownik)
Oba podejścia są szybkie (mniej niż jedna sekunda w ramce danych z 85 tys. Rzędami, 5-letnim szybkim dwurdzeniowym laptopem).
Powody, dla których to publikuję:
źródło
to jest mój sloution, podstawowa pętla
źródło
To jest moje rozwiązanie:
źródło