type float dtype data convert column change cast python pandas numpy

python - float - Pandas: convertir dtype ''objeto'' a int



pandas float to int (3)

He leído una consulta SQL en Pandas y los valores aparecen como dtype ''objeto'', aunque son cadenas, fechas y enteros. Soy capaz de convertir la fecha ''objeto'' en un dtype datetime de Pandas, pero recibo un error al intentar convertir la cadena y los enteros.

Aquí hay un ejemplo:

>>> import pandas as pd >>> df = pd.read_sql_query(''select * from my_table'', conn) >>> df id date purchase 1 abc1 2016-05-22 1 2 abc2 2016-05-29 0 3 abc3 2016-05-22 2 4 abc4 2016-05-22 0 >>> df.dtypes id object date object purchase object dtype: object

La conversión del df[''date''] a una fecha y hora funciona:

>>> pd.to_datetime(df[''date'']) 1 2016-05-22 2 2016-05-29 3 2016-05-22 4 2016-05-22 Name: date, dtype: datetime64[ns]

Pero recibo un error al intentar convertir el df[''purchase''] en un entero:

>>> df[''purchase''].astype(int) .... pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)() pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)() TypeError: long() argument must be a string or a number, not ''java.lang.Long''

NOTA: Obtengo un error similar cuando probé .astype(''float'')

Y cuando se intenta convertir a una cadena, nada parece suceder.

>>> df[''id''].apply(str) 1 abc1 2 abc2 3 abc3 4 abc4 Name: id, dtype: object


Documentar la respuesta que funcionó para mí en base al comentario de @piRSquared.

Necesitaba convertir primero a una cadena, luego a un entero.

>>> df[''purchase''].astype(str).astype(int)


Es sencillo

pd.factorize(df[''purchase''])[0]

Ejemplo:

labels, uniques = pd.factorize([''b'', ''b'', ''a'', ''c'', ''b''])

labels array([0, 0, 1, 2, 0])

uniques array([''b'', ''a'', ''c''], dtype=object)


Sigue estos pasos:

1. limpie su archivo -> abra su archivo de datos en formato csv y vea que hay "?" En lugar de lugares vacíos y borrarlos todos.

2.baje las filas que contienen valores perdidos, por ejemplo

df.dropna(subset=["normalized-losses"], axis = 0 , inplace= True)

3. use astype ahora para la conversión

df["normalized-losses"]=df["normalized-losses"].astype(int)

Nota: si aún encuentra errores en su programa, vuelva a inspeccionar su archivo csv , ábralo en Excel para ver si hay un "?" en la columna requerida, luego elimínelo y guarde el archivo y vuelva atrás y ejecute su programa.

comenta el éxito si funciona. :)