pandas
Datentypen
Suche…
Bemerkungen
dtypes sind nicht Pandabären. Sie sind ein Ergebnis der Pandas, die eng mit Numpy verbunden sind.
Der D-Typ einer Spalte muss in keiner Weise mit dem Python-Typ des in der Spalte enthaltenen Objekts korrelieren.
Hier haben wir eine pd.Series
mit Schwimmern. Der Typ wird float
.
Dann verwenden wir einen astype
, um es in ein Objekt astype
.
pd.Series([1.,2.,3.,4.,5.]).astype(object)
0 1
1 2
2 3
3 4
4 5
dtype: object
Der dtype ist jetzt object, aber die Objekte in der Liste sind immer noch float. Logisch, wenn Sie wissen, dass in Python alles ein Objekt ist und auf Objekt hochgefahren werden kann.
type(pd.Series([1.,2.,3.,4.,5.]).astype(object)[0])
float
Hier versuchen wir, die Schwimmer zu Saiten zu "gießen".
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
Der dtype ist jetzt object, aber der Typ der Einträge in der Liste ist string. Dies ist darauf zurückzuführen, dass sich numpy
nicht mit Strings befasst und sich so numpy
, als ob es sich nur um Objekte numpy
die nichts numpy
.
type(pd.Series([1.,2.,3.,4.,5.]).astype(str)[0])
str
Vertrauen Sie nicht D-Typen, sie sind ein Artefakt eines architektonischen Fehlers in Pandas. Geben Sie sie an, wie Sie müssen, aber verlassen Sie sich nicht darauf, welcher Datentyp für eine Spalte festgelegt ist.
Überprüfen der Spaltenarten
Spaltentypen können überprüft werden .dtypes
atrribute von Datenrahmen.
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
Für eine einzelne Serie können Sie das Attribut .dtype
.
In [4]: df['A'].dtype
Out[4]: dtype('int64')
Dtypes ändern
astype()
-Methode ändert den dtype einer Serie und gibt eine neue Serie zurück.
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
Ändern Sie den Typ von Spalte A in Float und den Typ von Spalte B in Ganzzahl:
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 ist für bestimmte Typumwandlungen .astype(float64')
Sie können .astype(float64')
, .astype(float32)
oder .astype(float16)
). Zur allgemeinen Konvertierung können Sie pd.to_numeric
, pd.to_datetime
und pd.to_timedelta
.
Ändern Sie den Typ in numerisch
pd.to_numeric
ändert die Werte in einen numerischen Typ.
In [6]: pd.to_numeric(df['E'])
Out[6]:
0 1
1 2
2 3
Name: E, dtype: int64
Standardmäßig gibt pd.to_numeric
einen Fehler aus, wenn eine Eingabe nicht in eine Zahl konvertiert werden kann. Sie können dieses Verhalten ändern, indem Sie den 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
Bei Bedarf können nicht alle Zeilen mit Eingabe in eine numerische Verwendung konvertiert werden. Verwenden Sie die boolean indexing
mit 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
Ändern des Typs 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]
Beachten Sie, dass 2.1.2011 in den 1. Februar 2011 konvertiert wird. Wenn Sie stattdessen den 2. Januar 2011 verwenden möchten, müssen Sie den Parameter dayfirst
.
In [13]: pd.to_datetime('2.1.2011', dayfirst=True)
Out[13]: Timestamp('2011-01-02 00:00:00')
Ändern des Typs 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]
Auswählen von Spalten basierend auf dtype
select_dtypes
Methode kann verwendet werden, um Spalten basierend auf dtype auszuwählen.
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
Mit include
und exclude
Parametern können Sie angeben, welche Typen Sie möchten:
# 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
Zusammenfassende dtypes
get_dtype_counts
Methode kann verwendet werden, um eine Aufschlüsselung der dtypes anzuzeigen.
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