Ich verwende Pandas mit Pandera für die Schema -Validierung, aber ich bin auf ein Problem gestoßen, da in den Daten eine Null -Integer -Spalte enthält. < /p>
from prefect import task, Flow #type:ignore
from pandera import Check, Column, DataFrameSchema
import prefect
import pandas as pd
import pandera as pa
import numpy as np
def pschema(d):
logger = prefect.utilities.logging.get_logger() # type: ignore
engine = connect_db(prefect.config.kv.p.staging_db_constring, logger) #type:ignore
table_name = "MyTable"
org = "myOrg"
k = {}
df = pd.read_sql(
f"SELECT NameStrNotQuoted, FieldTypeName, SizeStr, Precision, Scale FROM dbo.vw_cx_meta WHERE [Table] = '{table_name}' and Organization='{org}' AND ETL_Active = 1",
engine,
)
for row in df.itertuples(index=False):
if row.FieldTypeName == "int":
k.update({row.NameStrNotQuoted:Column(int,Check(lambda x: pd.Series([x.fillna(0)],dtype='Int64')),coerce=True, nullable=True)})
elif row.FieldTypeName == 'bit':
k.update({row.NameStrNotQuoted:Column(pa.Bool, coerce=True)})
sch = DataFrameSchema(k)
sch.validate(d)
return k
< /code>
Die Fehler: < /p>
ValueError: cannot convert float NaN to integer
.
.
.
File "/usr/local/lib/python3.8/site-packages/pandera/schemas.py", line 1789, in coerce_dtype
raise errors.SchemaError(
pandera.errors.SchemaError: Error while coercing 'CopySourceID' to type int64: Could not coerce data_container into type int64:
Ich bin mir von Pandas 'Gotcha' mit Nulls in int -Spalten bewusst und habe jede Permutation der Lambda -Funktion von Check ausprobiert, um dies zu lösen. Jede Hilfe wäre geschätzt, danke.
Ich verwende Pandas mit Pandera für die Schema -Validierung, aber ich bin auf ein [url=viewtopic.php?t=26065]Problem[/url] gestoßen, da in den Daten eine Null -Integer -Spalte enthält. < /p> [code]from prefect import task, Flow #type:ignore from pandera import Check, Column, DataFrameSchema import prefect import pandas as pd import pandera as pa import numpy as np
k = {} df = pd.read_sql( f"SELECT NameStrNotQuoted, FieldTypeName, SizeStr, Precision, Scale FROM dbo.vw_cx_meta WHERE [Table] = '{table_name}' and Organization='{org}' AND ETL_Active = 1", engine, ) for row in df.itertuples(index=False): if row.FieldTypeName == "int": k.update({row.NameStrNotQuoted:Column(int,Check(lambda x: pd.Series([x.fillna(0)],dtype='Int64')),coerce=True, nullable=True)}) elif row.FieldTypeName == 'bit': k.update({row.NameStrNotQuoted:Column(pa.Bool, coerce=True)}) sch = DataFrameSchema(k)
sch.validate(d) return k < /code> Die Fehler: < /p> ValueError: cannot convert float NaN to integer . . . File "/usr/local/lib/python3.8/site-packages/pandera/schemas.py", line 1789, in coerce_dtype raise errors.SchemaError( pandera.errors.SchemaError: Error while coercing 'CopySourceID' to type int64: Could not coerce data_container into type int64: [/code] Ich bin mir von Pandas 'Gotcha' mit Nulls in int -Spalten bewusst und habe jede Permutation der Lambda -Funktion von Check ausprobiert, um dies zu lösen. Jede Hilfe wäre geschätzt, danke.
Ich versuche, Benutzereingaben mit einem Array in Java zu nehmen, aber ich habe Probleme, die Elemente des Arrays nach dem Speichern der Werte zu drucken. Ich verwende einen Scanner, um die Eingabe...
Ich versuche, Benutzereingaben mit einem Array in Java zu nehmen, aber ich habe Probleme, die Elemente des Arrays nach dem Speichern der Werte zu drucken. Ich verwende einen Scanner, um die Eingabe...