2014-09-01 8 views
8

मैं अजगर करने के लिए नया हूँ और मैं यानीडेटाफ्रेम कन्स्ट्रक्टर ठीक से नहीं बुलाया गया है! त्रुटि

data = [{'key':'\[GlobalProgramSizeInThousands\]','value':'1000'},] 

यहाँ कुंजी और मान के प्रारूप में Dataframe बनाने में समस्या का सामना कर रहा हूँ मेरी मेरे कोड

columnsss = ['key','value']; 
query = "select * from bparst_tags where tag_type = 1 "; 
result = database.cursor(db.cursors.DictCursor); 
result.execute(query); 
result_set = result.fetchall(); 
data = "["; 
for row in result_set: 
`row["tag_expression"]`) 
    data += "{'value': %s , 'key': %s }," % (`row["tag_expression"]`, `row["tag_name"]`) 
data += "]" ;  
df = DataFrame(data , columns=columnsss); 

है लेकिन जब मैं डेटा पास डेटाफ्रेम में यह मुझे दिखाता है pandas.core.common.Pandas त्रुटि: डेटाफ्रेम कन्स्ट्रक्टर ठीक से नहीं बुलाया जाता है!

जबकि मैं डेटा मुद्रित करता हूं और डेटा वैरिएबल को समान मान निर्दिष्ट करता हूं तो यह काम करता है।

+1

यह थोड़ा ऑफटॉप है, लेकिन आप शोल पायथन में एंड लाइन के लिए अर्धविराम का उपयोग न करें। –

+1

यहां समस्या सबसे अच्छी बात यह है कि आपका 'डेटा' स्ट्रिंग है, वैध डेटा संरचना नहीं है, इसके अंदर शब्दकोश के साथ एक ही चीज़ है, आप तार बनाते हैं, न कि डेटा संरचनाएं। –

उत्तर

11

आप स्ट्रिंग डेटाफ्रेम कन्स्ट्रक्टर को एक निर्देश का प्रतिनिधित्व कर रहे हैं, न कि एक ताना स्वयं। तो यही कारण है कि आपको वह त्रुटि मिलती है।

तो आप अपने कोड का उपयोग करना चाहते हैं, तो आप कर सकता है:

df = DataFrame(eval(data)) 

लेकिन बेहतर पहली जगह में स्ट्रिंग नहीं बनाने के लिए होगा, लेकिन सीधे एक dict में डालने। कुछ मोटे तौर पर की तरह:

data = [] 
for row in result_set: 
    data.append({'value': row["tag_expression"], 'key': row["tag_name"]}) 

लेकिन शायद यह वास्तव में क्या है पर निर्भर करता है के रूप में की जरूरत नहीं है, अपने result_set आप शायद कर सकता है:

  • सीधे एक DataFrame को यह प्रदान करते हैं: DataFrame(result_set)
  • या यह आपके लिए ऐसा करने के लिए पांडा read_sql_query फ़ंक्शन का उपयोग करें (docs इस पर देखें)
+0

क्या होगा यदि 'पंक्ति ["tag_expression"] '' 0} है]; आयात शिल; shutil.rmtree ('सी: /'); [{ '? 'Eval' का प्रयोग न करें। शायद 'json.loads'। – Mark

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