2014-04-26 23 views
8

मैं,एक पांडा dataframe को dicts की एक सूची परिवर्तित

dict_keys= ['k1','k2','k3','k4','k5','k6'] # More like 30 keys in practice 
data = [] 
for i in range(20): # More like 3000 in practice 
    data.append({k: np.random.randint(100) for k in dict_keys}) 

का अजगर dict रों एक ही कुंजी के साथ प्रत्येक एक सूची है और इसका इस्तेमाल करने के सबसेट के साथ एक इसी पांडा dataframe बनाना चाहेंगे चांबियाँ। मेरे वर्तमान दृष्टिकोण एक समय में सूची में से एक से प्रत्येक dict लेने के लिए और

df = pd.DataFrame(columns=['k1','k2','k5','k6']) 
for d in data: 
    df = df.append({k: d[k] for k in list(df.columns)}, ignore_index=True) 
    # In practice, there are some calculations on some of the values here 

का उपयोग कर dataframe से संलग्न करने के लिए है, लेकिन यह बहुत धीमी गति से (वास्तविक सूची है, और dicts यह होता है, दोनों काफी हैं विशाल)।

क्या शब्दकोशों की सूची के माध्यम से पुनरावृत्ति के लिए एक बेहतर, तेज़ (और अधिक मूर्खतापूर्ण) विधि है और उन्हें एक पांडस डेटाफ्रेम पर पंक्तियों के रूप में जोड़ने के लिए है?

उत्तर

12

सीधे शब्दों में पारित dataDataFrame के __init__, करने के लिए या करने के लिए DataFrame.from_records (या तो काम करेंगे)।

आप भी एक इंडेक्स सेट करना चाहते हैं, उदा। DataFrame.from_records(data, index = 'k1')

यदि आपको कुछ गणना करने की आवश्यकता है, तो इसे बनाने के बाद DataFrame पर इसे करना आसान और अधिक सुविधाजनक है। लीवरेज पांडा!

+1

वाह, 'from_records' * तेज * है! – orome

संबंधित मुद्दे