पंडों का डेटाफ़्रेम की सूची


165

मेरे पास निम्नलिखित डेटाफ़्रेम है:

ग्राहक आइटम 1 आइटम 2 आइटम 3
1 सेब का दूध टमाटर
2 पानी नारंगी आलू
3 रस आम के चिप्स

जिसे मैं प्रति पंक्ति शब्दकोशों की सूची में अनुवाद करना चाहता हूं

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
ढेर अतिप्रवाह में आपका स्वागत है! मैंने आपके कोड नमूने को 4 स्थानों से प्रेरित किया है ताकि यह ठीक से प्रस्तुत हो सके - कृपया प्रारूपण पर अधिक जानकारी के लिए संपादन सहायता देखें।
बट्टूमी

जवाबों:


189

संपादित करें

जैसा कि जॉन गाल्ट ने अपने जवाब में उल्लेख किया है , आपको संभवतः इसके बजाय उपयोग करना चाहिए df.to_dict('records')। यह मैन्युअल रूप से ट्रांसपोज़िंग से तेज़ है।

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

मूल उत्तर

उपयोग df.T.to_dict().values(), नीचे की तरह:

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
प्रत्येक ग्राहक के लिए कई पंक्तियों वाले डेटाफ्रेम के मामले में समाधान क्या होगा?
अज़ीज़

2
जब मैं उपयोग करता हूं df.T.to_dict().values(), तो मैं क्रम को भी ढीला करता हूं
हुसैन

जब dicts की सूची में एक csv फ़ाइल खोलते हैं, तो मैं unicodecsv.DictReader
radtek

220

उपयोग df.to_dict('records')- बाहरी रूप से स्थानांतरित करने के लिए बिना आउटपुट देता है।

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
परिणामी सूची के प्रत्येक प्रविष्टि में सूचकांक मूल्य को शामिल करने के लिए मैं इसे कैसे बदलूंगा?
गेब्रियल एल। ओलिवेरा

5
@ GabrielL.Oliveira आप df.reset_index ()। To_dict ('रिकॉर्ड') कर सकते हैं
वी मा

क्या प्रत्येक मामले में कॉलम का क्रम आरक्षित है अर्थात परिणामी सूची में nth प्रविष्टि हमेशा nth कॉलम है?
क्लीब

@ कोलेब एनटीटी i.e. is the nth entry in the resulting list always also the nth column?कॉलम या एनटी पंक्ति हैं?
नौमान नईम

14

जॉन गाल्ट के जवाब के विस्तार के रूप में -

निम्नलिखित DataFrame के लिए,

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

यदि आप सूचकांक मूल्यों सहित शब्दकोशों की एक सूची प्राप्त करना चाहते हैं, तो आप कुछ ऐसा कर सकते हैं,

df.to_dict('index')

जो शब्दकोशों के शब्दकोश का आउटपुट देता है जहाँ मूल शब्दकोष की कुंजियाँ इंडेक्स वैल्यूज़ होती हैं। इस विशेष मामले में,

{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

यदि आप केवल एक कॉलम का चयन करने में रुचि रखते हैं तो यह काम करेगा।

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

नीचे काम नहीं करेगा और एक TypeError का उत्पादन करता है: असमर्थित प्रकार:। मेरा मानना ​​है कि यह इसलिए है क्योंकि यह एक श्रंखला को एक श्रुति में बदलने की कोशिश कर रहा है न कि डाटा फ्रेम को एक श्रुति में।

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

मुझे केवल एक कॉलम का चयन करने की आवश्यकता थी और इसे कुंजी के रूप में कॉलम नाम के साथ dicts की सूची में परिवर्तित करना था और इस पर थोड़ा अटक गया था ताकि मुझे लगा कि मैं साझा करूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.