pandas                
            Gegevenstypen
        
        
            
    Zoeken…
Opmerkingen
dtypes zijn niet inheems in panda's. Ze zijn het resultaat van panda's die dicht bij architecturale koppeling aan numpy zijn.
het dtype van een kolom hoeft op geen enkele manier te correleren met het python-type van het object in de kolom.
 Hier hebben we een pd.Series met praalwagens. Het dtype zal float . 
 Vervolgens gebruiken we astype om het te "casten" om bezwaar te maken. 
pd.Series([1.,2.,3.,4.,5.]).astype(object)
0    1
1    2
2    3
3    4
4    5
dtype: object
Het dtype is nu object, maar de objecten in de lijst zijn nog steeds zwevend. Logisch als je weet dat in python alles een object is en naar object kan worden opgewaardeerd.
type(pd.Series([1.,2.,3.,4.,5.]).astype(object)[0])
float
Hier proberen we de drijvers aan snaren te "gieten".
pd.Series([1.,2.,3.,4.,5.]).astype(str)
0    1.0
1    2.0
2    3.0
3    4.0
4    5.0
dtype: object
 Het dtype is nu object, maar het type invoer in de lijst is string. Dit komt omdat numpy niet met tekenreeksen omgaat en dus werkt alsof het alleen maar objecten zijn en geen probleem zijn. 
type(pd.Series([1.,2.,3.,4.,5.]).astype(str)[0])
str
Vertrouw geen dtypes, ze zijn een artefact van een architecturale fout in panda's. Geef ze op zoals u moet, maar vertrouw niet op wat dtype is ingesteld op een kolom.
Controle van de soorten kolommen
 Typen kolommen kunnen worden gecontroleerd door .dtypes atrribute of DataFrames. 
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.0, 2.0, 3.0], 'C': [True, False, True]})
In [2]: df
Out[2]:
   A    B      C
0  1  1.0   True
1  2  2.0  False
2  3  3.0   True
In [3]: df.dtypes
Out[3]:
A      int64
B    float64
C       bool
dtype: object
 Voor een enkele serie kunt u het kenmerk .dtype gebruiken. 
In [4]: df['A'].dtype
Out[4]: dtype('int64')
Dtypes veranderen
 astype() methode astype() wijzigt het dtype van een serie en retourneert een nieuwe serie. 
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.0, 2.0, 3.0], 
                           'C': ['1.1.2010', '2.1.2011', '3.1.2011'], 
                           'D': ['1 days', '2 days', '3 days'],
                           'E': ['1', '2', '3']})
In [2]: df
Out[2]:
   A    B          C       D  E
0  1  1.0   1.1.2010  1 days  1
1  2  2.0   2.1.2011  2 days  2
2  3  3.0   3.1.2011  3 days  3
In [3]: df.dtypes
Out[3]:
A      int64
B    float64
C     object
D     object
E     object
dtype: object
Wijzig het type kolom A in zwevend en type kolom B in geheel getal:
In [4]: df['A'].astype('float')
Out[4]:
0    1.0
1    2.0
2    3.0
Name: A, dtype: float64
In [5]: df['B'].astype('int')
Out[5]:
0    1
1    2
2    3
Name: B, dtype: int32
 astype() methode astype() is voor een specifieke .astype(float64') u kunt bijvoorbeeld .astype(float64') , .astype(float32) of .astype(float16) . Voor algemene conversie kunt u pd.to_numeric , pd.to_datetime en pd.to_timedelta . 
Het type wijzigen in numeriek
 pd.to_numeric wijzigt de waarden in een numeriek type. 
In [6]: pd.to_numeric(df['E'])
Out[6]:
0    1
1    2
2    3
Name: E, dtype: int64
 Standaard geeft pd.to_numeric een foutmelding als een invoer niet naar een getal kan worden geconverteerd. U kunt dat gedrag wijzigen met de parameter errors . 
# Ignore the error, return the original input if it cannot be converted
In [7]: pd.to_numeric(pd.Series(['1', '2', 'a']), errors='ignore')
Out[7]:
0    1
1    2
2    a
dtype: object
# Return NaN when the input cannot be converted to a number
In [8]: pd.to_numeric(pd.Series(['1', '2', 'a']), errors='coerce')
Out[8]:
0    1.0
1    2.0
2    NaN
dtype: float64
 Indien nodig, vink alle rijen met invoer niet aan naar numeriek gebruik boolean indexing met isnull : 
In [9]: df = pd.DataFrame({'A': [1, 'x', 'z'],
                           'B': [1.0, 2.0, 3.0],
                           'C': [True, False, True]})
In [10]: pd.to_numeric(df.A, errors='coerce').isnull()
Out[10]: 
0    False
1     True
2     True
Name: A, dtype: bool
In [11]: df[pd.to_numeric(df.A, errors='coerce').isnull()]
Out[11]: 
   A    B      C
1  x  2.0  False
2  z  3.0   True
Het type wijzigen in datetime
In [12]: pd.to_datetime(df['C'])
Out[12]:
0   2010-01-01
1   2011-02-01
2   2011-03-01
Name: C, dtype: datetime64[ns]
 Merk op dat 2.1.2011 wordt geconverteerd naar 1 februari 2011. Als u in plaats daarvan 2 januari 2011 wilt, moet u de parameter dayfirst . 
In [13]: pd.to_datetime('2.1.2011', dayfirst=True)
Out[13]: Timestamp('2011-01-02 00:00:00')
Het type wijzigen in timedelta
In [14]: pd.to_timedelta(df['D'])
Out[14]:
0   1 days
1   2 days
2   3 days
Name: D, dtype: timedelta64[ns]
Kolommen selecteren op basis van dtype
 select_dtypes methode select_dtypes kan worden gebruikt om kolommen te selecteren op basis van dtype. 
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.0, 2.0, 3.0], 'C': ['a', 'b', 'c'], 
                           'D': [True, False, True]})
In [2]: df
Out[2]: 
   A    B  C      D
0  1  1.0  a   True
1  2  2.0  b  False
2  3  3.0  c   True
 Met parameters voor include en exclude kunt u opgeven welke typen u wilt: 
# Select numbers
In [3]: df.select_dtypes(include=['number'])  # You need to use a list
Out[3]:
   A    B
0  1  1.0
1  2  2.0
2  3  3.0    
# Select numbers and booleans
In [4]: df.select_dtypes(include=['number', 'bool'])
Out[4]:
   A    B      D
0  1  1.0   True
1  2  2.0  False
2  3  3.0   True
# Select numbers and booleans but exclude int64
In [5]: df.select_dtypes(include=['number', 'bool'], exclude=['int64'])
Out[5]:
     B      D
0  1.0   True
1  2.0  False
2  3.0   True
Samenvatting van de soorten
 get_dtype_counts methode get_dtype_counts kan worden gebruikt om een uitsplitsing van dtypes te bekijken. 
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.0, 2.0, 3.0], 'C': ['a', 'b', 'c'], 
                           'D': [True, False, True]})
In [2]: df.get_dtype_counts()
Out[2]: 
bool       1
float64    1
int64      1
object     1
dtype: int64