2013-10-06 17 views
11

पर कुशलतापूर्वक कैसे स्थानांतरित कर सकता हूं मैंने तिथि के अनुसार कुछ समेकन करने के लिए pandas का उपयोग शुरू कर दिया है। मेरा लक्ष्य किसी विशेष दिन पर होने वाले माप के सभी उदाहरणों को गिनना है, और उसके बाद D3 में इसका प्रतिनिधित्व करना है। मेरे कार्यप्रवाह समझाने के लिए, मैं (Django से) एक क्वेरीसमूह है कि इस तरह दिखता है:मैं पांडस डेटाफ्रेम से JSON

queryset = [{'created':"05-16-13", 'counter':1, 'id':13}, {'created':"05-16-13", 'counter':1, 'id':34}, {'created':"05-17-13", 'counter':1, 'id':12}, {'created':"05-16-13", 'counter':1, 'id':7}, {'created':"05-18-13", 'counter':1, 'id':6}] 

मैं pandas में एक dataframe बनाने के लिए और दिन बनाया द्वारा उपाय 'काउंटर' कुल:

import pandas as pd 
queryset_df = pd.DataFrame.from_records(queryset).set_index('id') 
aggregated_df = queryset_df.groupby('created').sum() 

  counter 
created   
05-16-13  3 
05-17-13  1 
05-18-13  1 

जैसा कि मैंने D3 उपयोग कर रहा हूँ मैंने सोचा था कि एक JSON वस्तु टी होगा: यह मुझे इस तरह एक dataframe देता है वह सबसे उपयोगी है। Pandasto_json() समारोह का उपयोग करते हुए मैं इस तरह मेरी dataframe कन्वर्ट:

aggregated_df.to_json() 

, मुझे दे JSON वस्तु

{"counter":{"05-16-13":3,"05-17-13":1,"05-18-13":1}} 

यह नहीं है कि मैं वास्तव में क्या चाहते हैं निम्नलिखित के रूप में मैं दोनों का उपयोग कर सकेंगे चाहते हैं तारीख, और माप। क्या कोई तरीका है कि मैं डेटा निर्यात कर सकता हूं जैसे कि मैं इस तरह कुछ खत्म करूँ?

data = {"c1":{"date":"05-16-13", "counter":3},"c2":{"date":"05-17-13", "counter":1}, "c3":{"date":"05-18-13", "counter":1}} 

मैंने सोचा कि अगर मैं Python पक्ष पर अलग ढंग से इस संरचना सकता है, यह डेटा स्वरूपण की राशि मैं JS पक्ष पर क्या करने की जरूरत के रूप में मैं कुछ इस तरह कर रही डेटा लोड करने की योजना बनाई है को कम करेगा:

x.domain(d3.extent(data, function(d) { return d.date; })); 
    y.domain(d3.extent(data, function(d) { return d.counter; })); 

मैं बेहतर वर्कफ़्लो के सुझाव के लिए बहुत खुले समग्र रूप में यह कुछ मैं अक्सर क्या करने की जरूरत है, लेकिन D3 और pandas के बीच संबंध से निपटने का सबसे अच्छा तरीका को लेकर अनिश्चित हूं जाएगा हूँ। (मैंने कई पैकेजों को देखा है जो python और D3 दोनों को सीधे जोड़ते हैं, लेकिन ऐसा कुछ ऐसा नहीं है जिसे मैं स्थिर चार्ट पीढ़ी पर ध्यान केंद्रित कर रहा हूं और एक एसवीजी नहीं बना रहा हूं)

उत्तर

22

अपनी डेट इंडेक्स को वापस ट्रांसफॉर्म करें reset_index के साथ एक साधारण डेटा कॉलम, और उसके बाद orient='index' प्रॉपर्टी का उपयोग करके अपनी जेसन ऑब्जेक्ट जेनरेट करें:

In [11]: aggregated_df.reset_index().to_json(orient='index') 
Out[11]: '{"0":{"created":"05-16-13","counter":3},"1":{"created":"05-17-13","counter":1},"2":{"created":"05-18-13","counter":1}}' 
संबंधित मुद्दे