2016-05-18 6 views
0

In Python 2.7, ich auf eine externe Datenquelle bin verbindet die folgende Verwendung:Ersetzen Bad Daten in Pandas Data Frame

import pypyodbc 
import pandas as pd 
import datetime 
import csv 
import boto3 
import os 

# Connect to the DataSource 
conn = pypyodbc.connect("DSN = FAKE DATA SOURCE; UID=FAKEID; PWD=FAKEPASSWORD") 

# Specify the query we're going to run on it 
script = ("SELECT * FROM table") 

# Create a dataframe from the above query 
df = pd.read_sql_query(script, conn) 

Ich erhalte die folgende Fehlermeldung:

C:\Python27\python.exe "C:/Thing.py" 
Traceback (most recent call last): 
    File "C:/Thing.py", line 30, in <module> 
    df = pd.read_sql_query(script,conn) 
    File "C:\Python27\lib\site-packages\pandas-0.18.1-py2.7-win32.egg\pandas\io\sql.py", line 431, in read_sql_query 
    parse_dates=parse_dates, chunksize=chunksize) 
    File "C:\Python27\lib\site-packages\pandas-0.18.1-py2.7-win32.egg\pandas\io\sql.py", line 1608, in read_query 
    data = self._fetchall_as_list(cursor) 
    File "C:\Python27\lib\site-packages\pandas-0.18.1-py2.7-win32.egg\pandas\io\sql.py", line 1617, in _fetchall_as_list 
    result = cur.fetchall() 
    File "build\bdist.win32\egg\pypyodbc.py", line 1819, in fetchall 
    File "build\bdist.win32\egg\pypyodbc.py", line 1871, in fetchone 
ValueError: could not convert string to float: ? 

Es ist scheint ich, dass in einer der Float-Spalten ein '?' Symbol aus irgendeinem Grund. Ich habe mich an den Besitzer der Datenquelle gewandt, aber sie kann die zugrunde liegende Tabelle nicht ändern.

Gibt es eine Möglichkeit, falsche Daten wie Pandas zu ersetzen? Ich habe versucht, nach der read_sql_query Anweisung ersetzen, aber ich bekomme den gleichen Fehler.

+2

Bitte zeigen Sie die komplette Traceback. Die Verwendung von 'replace' * nach *' read_sql_query' hilft nicht, wenn Sie den Fehler bereits mit dem angezeigten Code erhalten. Wenn Sie den Fehler nicht bereits mit dem angezeigten Code erhalten, müssen Sie den Code anzeigen, der den Fehler verursacht. – BrenBarn

+0

Entschuldigung! Ich habe den vollständigen Traceback hinzugefügt. Der obige Code verursacht den Fehler für sich. – user2752159

+0

Können Sie die Daten mit pyodbc direkt aus der Tabelle lesen? Der Fehler scheint nichts mit Pandas zu tun zu haben. – BrenBarn

Antwort

0

Fest für bestimmte wissen, ohne natürlich Ihre Daten zu haben, aber Sie könnten versuchen, coerce_float-False, das heißt ersetzen Sie die letzte Zeile mit

df = pd.read_sql_query(script, conn, coerce_float=False) 

Siehe documentation of read_sql_query Einstellung.

+0

Danke für die Antwort! Leider führt 'df = pd.read_sql_query (script, conn, coerce_float = False) 'den gleichen Fehler, die vollständige Traceback-Operation ist oberhalb. – user2752159