Mam następującą ramkę DataFrame:
klient pozycja1 pozycja2 pozycja3 1 pomidor jabłkowy 2 pomarańczowe ziemniaki wodne 3 sok z chipsów mango
które chcę przetłumaczyć na listę słowników w wierszu
rows = [{'customer': 1, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'},
{'customer': 2, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'},
{'customer': 3, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}]
Odpowiedzi:
Edytować
Jak wspomina John Galt w swojej odpowiedzi , prawdopodobnie powinieneś zamiast tego użyć
df.to_dict('records')
. To szybsze niż transpozycja ręczna.Oryginalna odpowiedź
Użyj
df.T.to_dict().values()
, jak poniżej:źródło
df.T.to_dict().values()
, tracę również porządek sortowaniaunicodecsv.DictReader
Użyj
df.to_dict('records')
- daje wynik bez konieczności zewnętrznej transpozycji.źródło
i.e. is the nth entry in the resulting list always also the nth column?
n-ta kolumna czy n-ty wiersz?Jako rozszerzenie odpowiedzi Johna Galta -
W przypadku następującej ramki DataFrame
Jeśli chcesz uzyskać listę słowników zawierającą wartości indeksu, możesz zrobić coś takiego,
Który generuje słownik słowników, w którym klucze słownika nadrzędnego są wartościami indeksu. W tym konkretnym przypadku
źródło
Jeśli chcesz wybrać tylko jedną kolumnę, zadziała.
Poniższe NIE zadziała i utworzy TypeError: unsupported type:. Uważam, że dzieje się tak, ponieważ próbuje przekonwertować serię na dykt, a nie ramkę danych na dyktę.
Miałem wymóg, aby wybrać tylko jedną kolumnę i przekonwertować ją na listę dykt z nazwą kolumny jako kluczem i utknąłem na tym trochę, więc pomyślałem, że podzielę się.
źródło