2015-03-25 14 views
12

Per pandi, qualcuno dovrebbe sapere, se qualsiasi tipo di dati da partequali sono tutti i dtypes riconosciuti dai panda?

(i) float64, int64 (e altre varianti di np.number come float32, int8 etc.)

(ii) bool

(iii) datetime64, timedelta64

come colonne di stringhe, hanno sempre un dtype di object?

In alternativa, voglio sapere, se ci sono tipo di dati a parte (i), (ii) e (iii) nella lista di cui sopra che pandas non rende è dtype un object?

+0

Correlati: http://stackoverflow.com/questions/21197774/assign-pandas-dataframe-column-dtypes –

risposta

4

C'è anche uint8.

I documenti di Pandas su dtypes hanno molte più informazioni.

I principali tipi memorizzati negli oggetti panda sono float, int, bool, datetime64 [ns], timedelta [ns], e l'oggetto. Inoltre questi dtypes hanno dimensioni degli articoli, ad es. int64 e int32.

Per impostazione predefinita, i tipi interi sono int64 e i tipi float sono float64, INDIPENDENTE della piattaforma (32 bit o 64 bit). Quanto segue sarà tutto il risultato in dpi di int64.

Numpy, tuttavia, sceglierà i tipi dipendenti dalla piattaforma quando creano gli array . Il seguente risultato risulterà in int32 sulla piattaforma a 32 bit.

+4

Hanno spostato questa sezione in: http://pandas.pydata.org/pandas-docs/stable/basics .html # dtypes –

+0

@AntonTarasenko Grazie. Ho aggiornato il link. – Alexander

5

pandas prende in prestito i dtypes da numpy. Per dimostrazione di questo si veda il seguente:

import pandas as pd 

df = pd.DataFrame({'A': [1,'C',2.]}) 
df['A'].dtype 

>>> dtype('O') 

type(df['A'].dtype) 

>>> numpy.dtype 

È possibile trovare l'elenco dei validi numpy.dtypesin the documentation:

'?'Boolean

'b'(con segno) byte

'B' byte senza segno

'i'(firmato) integer

'u' intero senza segno

'f' galleggiante -Point

'c' punti complessi fluttuante timedelt

'm' datetime un

'M'

'O' (Python)

'S', 'a' terminata da zero byte (raccomandato) stringa

'U' Unicode

'V' dati grezzi (nulli)

pandas devono sostenere questi tipi. Utilizzando il metodo astype di un oggetto pandas.Series con una delle opzioni precedenti, l'argomento di input risulterà in pandas cercando di convertire lo Series in quel tipo (o almeno tornando al tipo object); 'u' è l'unico che vedo pandas non comprendendo affatto:

df['A'].astype('u') 

>>> TypeError: data type "u" not understood 

Questo è un errore numpy derivante dal fatto che le 'u' deve essere seguita da un numero che specifica il numero di byte per ciascun elemento (che deve essere valido):

import numpy as np 

np.dtype('u') 

>>> TypeError: data type "u" not understood 

np.dtype('u1') 

>>> dtype('uint8') 

np.dtype('u2') 

>>> dtype('uint16') 

np.dtype('u4') 

>>> dtype('uint32') 

np.dtype('u8') 

>>> dtype('uint64') 

# testing another invalid argument 
np.dtype('u3') 

>>> TypeError: data type "u3" not understood 

in sintesi, i metodi di astypepandas oggetti verranno provare a fare qualcosa di sensato con qualsiasi argomento che è valida per numpy.dtype. Notare che numpy.dtype('f') è lo stesso di numpy.dtype('float32') e numpy.dtype('f8') è lo stesso di numpy.dtype('float64') ecc. Lo stesso vale per passare gli argomenti ai metodi pandasastype.

Problemi correlati