Pandalar DataFrame - Sözlükler Listesi


166

Aşağıdaki DataFrame var:

müşteri item1 item2 item3
1 elma sütü domates
2 su turuncu patates
3 meyve suyu mango cipsi

hangi satır başına sözlük listesine çevirmek istiyorum

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'}]

2
Stack Overflow'a hoş geldiniz! Kod örneğinizi düzgün şekilde görüntülenmesi için 4 boşluk girintilendirdim - biçimlendirme hakkında daha fazla bilgi için lütfen düzenleme yardımına bakın.
ByteHamster

Yanıtlar:


190

Düzenle

John Galt'in cevabından bahsettiği gibi , muhtemelen kullanmalısınız df.to_dict('records'). Elle aktarmadan daha hızlı.

In [20]: timeit df.T.to_dict().values()
1000 loops, best of 3: 395 µs per loop

In [21]: timeit df.to_dict('records')
10000 loops, best of 3: 53 µs per loop

Orijinal cevap

df.T.to_dict().values()Aşağıdaki gibi kullanın :

In [1]: df
Out[1]:
   customer  item1   item2   item3
0         1  apple    milk  tomato
1         2  water  orange  potato
2         3  juice   mango   chips

In [2]: df.T.to_dict().values()
Out[2]:
[{'customer': 1.0, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'},
 {'customer': 2.0, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'},
 {'customer': 3.0, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}]

2
Her Müşteri için birçok satır içeren bir veri çerçevesi söz konusu olduğunda çözüm ne olur?
Aziz

2
Kullandığımda df.T.to_dict().values()sıralama düzenini de
Hussain

unicodecsv.DictReader
Dikte

220

Kullan df.to_dict('records')- harici olarak aktarmaya gerek kalmadan çıktı verir.

In [2]: df.to_dict('records')
Out[2]:
[{'customer': 1L, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'},
 {'customer': 2L, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'},
 {'customer': 3L, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}]

2
Sonuç listesinin her girdisine dizin değerini dahil edecek şekilde nasıl değiştirebilirim?
Gabriel L. Oliveira

5
@ GabrielL.Oliveira yapabilirsiniz df.reset_index (). To_dict ('kayıtlar')
Wei Ma

Her durumda sütunların sırası ayrılıyor mu, yani sonuç listesindeki n. Giriş her zaman n. Sütunu mu?
Cleb

@Birinci i.e. is the nth entry in the resulting list always also the nth column?sütun n. Satır mı?
Nauman Naeem

14

John Galt'in cevabının bir uzantısı olarak -

Aşağıdaki DataFrame için,

   customer  item1   item2   item3
0         1  apple    milk  tomato
1         2  water  orange  potato
2         3  juice   mango   chips

Dizin değerlerini içeren sözlüklerin bir listesini almak istiyorsanız,

df.to_dict('index')

Üst sözlüğün anahtarlarının dizin değerleri olduğu bir sözlük sözlüğü çıktısı. Bu özel durumda,

{0: {'customer': 1, 'item1': 'apple', 'item2': 'milk', 'item3': 'tomato'},
 1: {'customer': 2, 'item1': 'water', 'item2': 'orange', 'item3': 'potato'},
 2: {'customer': 3, 'item1': 'juice', 'item2': 'mango', 'item3': 'chips'}}

1

Yalnızca bir sütun seçmekle ilgileniyorsanız, bu işe yarayacaktır.

df[["item1"]].to_dict("records")

Aşağıda olacak DEĞİL çalışmak ve bir TypeError üretir: desteklenmeyen tür. Bence bu bir seriyi bir veri çerçevesine değil, bir dikente dönüştürmeye çalışıyor.

df["item1"].to_dict("records")

Ben sadece bir sütun seçmek ve sütun adı anahtar olarak dikte listesi dönüştürmek için bir gereksinimi vardı ve ben paylaşmak düşündüm biraz bu kadar sıkışmış.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.