Quando faccioRegola i panda read_sql_query Trattamento del valore 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
il risultato è una colonna di None
valori al contrario di float("nan")
. Questo è piuttosto fastidioso se specialmente leggi le colonne float con valori NULL a chunk-wise.
La versione read_sql_table
funziona correttamente, poiché suppongo che possa utilizzare le informazioni sul tipo.
Esiste un modo semplice per regolare read_sql_query
anche per interpretare i valori NULL
come float("nan")
?
Ho paura che non ci sia un modo semplice. Pandas non converte tutti i Nones (ad es. 'Pd.Series ([None, None])' non fornisce alcun valore e non NaN) ma li mantiene come oggetto, e 'read_sql_query' non può mai sapere che si suppone che siano float. Se * tu * sai avanzare quali colonne devono essere float, puoi fare un 'df ['a']. Astype (float)' su quella colonna. – joris
Ma sono d'accordo che questo è un problema è un caso del genere. Un possibile argomento di parole chiave per specificare il tipo per una determinata colonna (come 'dtype' in' read_csv') potrebbe essere utile qui. È sempre possibile aprire un problema su https://github.com/pydata/pandas/issues – joris
o un parametro 'converters', anche come' read_csv', se possibile – vmg