2015-06-04 9 views
6

जब मैंपांडा को समायोजित करें read_sql_query NULL मूल्य उपचार?

from sqlalchemy import create_engine 
import pandas as pd 

engine = create_engine('sqlite://') 
conn = engine.connect() 
conn.execute("create table test (a float)") 
for _ in range(5): 
    conn.execute("insert into test values (NULL)") 

df = pd.read_sql_query("select * from test", engine) 
#df = pd.read_sql_table("test", engine) 
df.a 

कर परिणाम के रूप में करने का विरोध किया float("nan")None मूल्यों का एक स्तंभ है। यह बहुत परेशान है अगर विशेष रूप से यदि आप नल मूल्यों के साथ फ्लोट कॉलम पढ़ते हैं तो खंड-वार।

read_sql_table संस्करण ठीक काम करता है, क्योंकि मुझे लगता है कि यह प्रकार की जानकारी का उपयोग कर सकता है।

क्या read_sql_query को NULL मानों को float("nan") के रूप में भी समझने का एक आसान तरीका है?

+0

मुझे डर है कि कोई आसान तरीका नहीं है। पांडस सभी नॉनों को परिवर्तित नहीं करता है (उदाहरण के लिए 'पीडी.रीरीज़ ([कोई नहीं, कोई नहीं])' आपको कोई मूल्य नहीं देता है और नाएन नहीं) लेकिन उन्हें ऑब्जेक्ट के रूप में रखता है, और 'read_sql_query' कभी नहीं जानता कि इसे फ़्लोट किया जाना चाहिए। यदि * आप * यह जानते हैं कि कौन से स्तंभों को फ़्लोट करना है, तो आप उस कॉलम पर 'df [' a '] कर सकते हैं। Astype (float)'। – joris

+0

लेकिन मैं मानता हूं कि यह एक समस्या है। किसी निश्चित कॉलम के प्रकार को निर्दिष्ट करने के लिए एक संभावित कीवर्ड तर्क (जैसे 'read_csv' में 'dtype') शायद यहां उपयोगी हो सकता है। आप https://github.com/pydata/pandas/issues – joris

+0

या एक 'कन्वर्टर्स' पैरामीटर पर भी एक मुद्दा खोल सकते हैं, जैसे कि 'read_csv', यदि संभव हो तो – vmg

उत्तर

0

ऐसा लगता है an issue उठाया गया था और यह की तरह कुछ - लिंक किए गए पृष्ठ में पांडा के लिए जोड़ा गया संस्करण 0.7.2 में, के रूप में wesm की टिप्पणी प्रति - coerce_float तर्क:

हाय आर्थर, मैं एक विकल्प जोड़ coerce_float (उपर्युक्त प्रतिबद्धता में) जो दशमलव को परिवर्तित करता है -> फ्लोट और नाइन के साथ कोई भी भरता नहीं है। दशमलव से फ्लोट में कनवर्ट करना अभी भी वास्तव में धीमा है। 0.7.2 का हिस्सा जल्द ही

जारी होने की हो जाएगा हालांकि pandas.read_sql_query 0.18.1 docs में वर्णन भ्रामक लगता है:

coerce_float: बुलियन, डिफ़ॉल्ट गैर स्ट्रिंग के लिए मूल्यों को परिवर्तित करने के लिए यह सच है

प्रयास , गैर-संख्यात्मक वस्तुओं (जैसे दशमलव। दशमलव) फ्लोटिंग बिंदु पर, एसक्यूएल परिणाम सेट के लिए उपयोगी

+0

उपर्युक्त उदाहरण के लिए यह कोई फर्क नहीं पड़ता है :( – Gerenuk

+0

यह निराशाजनक है। इसने मुझे एक संबंधित समस्या का सामना करना पड़ा, इसलिए मुझे लगता है कि यह यहां उत्तर देने का वारंट है। आपके मामले में, मुझे लगता है कि आपको एक संबंधित समस्या उठानी चाहिए github पर और परिणामों के साथ प्रश्न का उत्तर/जवाब दें। – vmg

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