Kiedy zrobićDostosuj pandy read_sql_query NULL traktowania wartości?
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
wynik jest kolumna None
wartości w przeciwieństwie do float("nan")
. Jest to dość denerwujące, szczególnie jeśli czytasz kolumny zmiennoprzecinkowe z wartościami NULL.
Wersja read_sql_table
działa dobrze, ponieważ przypuszczam, może wykorzystywać informacje typu.
Czy istnieje prosty sposób, aby dostosować read_sql_query
do interpretacji wartości NULL
jako float("nan")
?
Obawiam się, że nie ma łatwego sposobu. Pandy nie konwertują wszystkich Nonów (np. 'Pd.Series ([None, None])' daje wartości None, a nie NaN), ale zachowuje je jako obiekt, a 'read_sql_query' nigdy nie wie, że miały być pływające. Jeśli * ty * wiesz, że przesuwasz kolumny, które mają być pływające, możesz zrobić "df [" a "]. Astype (float)' w tej kolumnie. – joris
Ale zgadzam się, że to jest taki problem. Możliwy tutaj może być argument argumentów możliwych do określenia typu dla pewnej kolumny (np. 'Dtype' w' read_csv'). Zawsze można otworzyć problem w https://github.com/pydata/pandas/issues – joris
lub 'converters' parametru, jak również' read_csv', jeśli w ogóle możliwe – vmg