Sei morso dai problemi di (in)sensibilità al caso con PostgreSQL. Se citi il nome della tabella nella query, funzionerà:
df = pd.read_sql_query('select * from "Stat_Table"',con=engine)
Ma personalmente, consiglierei di usare sempre nomi di tabelle minuscoli (e nomi di colonne), anche quando si scrive la tabella nel database per evitare tali problemi.
Dai documenti PostgreSQL (http:// www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS ):
Per spiegare un po' di più:hai scritto una tabella con il nome Stat_Table
al database (e sqlalchemy citerà questo nome, quindi verrà scritto come "Stat_Table" nel database postgres). Quando si esegue la query 'select * from Stat_Table'
il nome della tabella senza virgolette verrà convertito in stat_table
minuscolo , e così ottieni il messaggio che questa tabella non è stata trovata.
Vedi ad esempio anche I nomi delle colonne PostgreSQL fanno distinzione tra maiuscole e minuscole?