Pandas df.astype()-Funktion
df.astype()Es ist eine Funktion in Pandas zum Konvertieren der Datentypen eines DataFrame oder Series.
Bei der Datenverarbeitung sind nicht übereinstimmende Datentypen ein häufiges Problem. Zum Beispiel Zahlen, die als Zeichenketten gespeichert sind, Datumsangaben, die als Text gespeichert sind, usw.astype()Es ermöglicht Ihnen, Daten explizit in den erforderlichen Typ zu konvertieren, wie integer, float, string, date usw., und stellt sicher, dass die Daten korrekt berechnet und analysiert werden können.
Grundlegende Syntax und Parameter
astype()Es ist sowohl eine Mitgliedsfunktion von DataFrame als auch eine Mitgliedsfunktion von Series, die über den Punktoperator aufgerufen wird.zum Aufrufen.
Syntaxformat
DataFrame.astype(dtype, copy=True, errors='raise') Series.astype(dtype, copy=True, errors='raise')
Parameterbeschreibung
| Parameter | Type | Erforderlich? | Beschreibung | Standardwert |
|---|---|---|---|---|
| dtype | Python dtype oder numpy dtype | Erforderlich | Zieldatentyp. Er kann ein Python-Typ sein (z. B.,int、str), ein NumPy-Typ (z. B.,np.int64、np.float32), oder ein Pandas-Typ (z. B.,'int64'、'float64'、'category')。 |
Keine |
| copy | bool | Optional | Wenn esTrue, immer ein neues Objekt zurückgeben; wenn esFalse, das ursprüngliche Objekt nach Möglichkeit ändern. |
True |
| errors | str | Optional | Steuert die Fehlerbehandlung.'raise'Gibt an, dass eine Ausnahme ausgelöst wird, wenn die Konvertierung fehlschlägt;'ignore'Gibt an, dass die ursprünglichen Daten zurückgegeben werden, wenn die Konvertierung fehlschlägt, ohne eine Ausnahme auszulösen. |
'raise' |
Beschreibung des Rückgabewerts
- Gibt einen neuen DataFrame oder eine neue Series zurück, in dem die Datentypen aller angegebenen Spalten in den Zieltyp konvertiert wurden.
Beispiele
Lassen Sie uns dies anhand einer Reihe von Beispielen gründlich meistern.astype()die Verwendung von.
Beispiel 1: Datentyp einer einzelnen Spalte konvertieren
Konvertiert eine Spalte einer Series oder eines DataFrame in den angegebenen Typ.
Beispiel
# DataFrame erstellen, in dem Werte als Zeichenketten gespeichert werden
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
'age': ['25', '30', '35', '28'], # Als Zeichenkette speichern
'Salary': ['5000', '6000', '5500', '7000'] # Als Zeichenkette speichern
}
df = pd.DataFrame(data)
print("Ursprünglicher Datentyp:")
print(df.dtypes)
print("=" * 50)
# Spalte "Age" in den Integer-Typ konvertieren
df['age'] = df['age'].astype(int)
print(Datentyp der Spalte age nach der Konvertierung:)
print(df.dtypes)
print("=" * 50)
# Die Spalte 'Salary' in den Float-Typ konvertieren
df['Salary'] = df['Salary'].astype(float)
print(Datentyp der Spalte 'salary' nach der Konvertierung:)
print(df.dtypes)
print("=" * 50)
print("Konvertierte Daten:")
print(df)
Erwartete Ausgabe:
原始数据类型:
姓名 object
年龄 object # 字符串类型
薪资 object # 字符串类型
==================================================
转换年龄列后的数据类型:
姓名 object
年龄 int64 # 整数类型
薪资 object
==================================================
转换薪资列后的数据类型:
姓名 object
年龄 int64
薪资 float64 # 浮点数类型
==================================================
转换后的数据:
姓名 年龄 薪资
0 张三 25 5000.0
1 李四 30 6000.0
2 王五 35 5500.0
3 赵六 28 7000.0
Code-Erklärung:
- In den ursprünglichen Daten sind 'age' und 'salary' beide vom Typ String (
object)。 - Verwenden Sie
df['列名'].astype(int)um Zeichenketten in Ganzzahlen umzuwandeln. - Nach der Konvertierung können numerische Berechnungen durchgeführt werden, wie Summe, Durchschnitt usw.
Beispiel 2: Datentypen eines gesamten DataFrame konvertieren
Sie können Datentypen für das gesamte DataFrame auf einmal angeben.
Beispiel
# DataFrame erstellen
data = {
'A': [1, 2, 3, 4],
'B': [1.5, 2.5, 3.5, 4.5],
'C': ['a', 'b', 'c', 'd']
}
df = pd.DataFrame(data)
print("Ursprünglicher Datentyp:")
print(df.dtypes)
print("=" * 50)
# Spalte A in float64 und Spalte B in int64 konvertieren
df_converted = df.astype({'A': 'float64', 'B': 'int64'})
print(Konvertierte Datentypen:)
print(df_converted.dtypes)
print("=" * 50)
print("Konvertierte Daten:")
print(df_converted)
Erwartete Ausgabe:
原始数据类型:
A int64
B float64
C object
==================================================
转换后的数据类型:
A float64
B int64 # 小数部分被截断
C object
==================================================
转换后的数据:
A B C
0 1.0 2 a
1 2.0 2 b
2 3.0 3 c
3 4.0 4 d
Code-Erklärung:
- Ein Wörterbuch verwenden
{'Column Name': 'Type'}Sie können die Konvertierungstypen mehrerer Spalten gleichzeitig angeben. - Beim Konvertieren der Float-Werte in Spalte B in Ganzzahlen wird der Dezimalteil abgeschnitten (2.5 wird zu 2).
Beispiel 3: In den kategorischen Datentyp konvertieren
Kategorischer Datentyp (category) kann Speicher sparen und eignet sich besonders für Spalten mit begrenzten Werten.
Beispiel
# Ein DataFrame mit vielen doppelten Werten erstellen
data = {
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Peking', 'Shanghai', 'Guangzhou', 'Shenzhen'] * 1000,
Zahlen: bereich(8000)
}
df = pd.DataFrame(data)
print("Ursprünglicher Datentyp:")
print(df.dtypes)
print(fSpeicherverbrauch: {df.memory_usage(deep=True).sum() / 1024:.2f} KB)
print("=" * 50)
# Die Spalte "City" in den kategorischen Typ konvertieren
df['city'] = df['city'].astype('category')
print(Konvertierte Datentypen:)
print(df.dtypes)
print(fSpeicherverbrauch: {df.memory_usage(deep=True).sum() / 1024:.2f} KB)
Erwartete Ausgabe:
原始数据类型: 城市 object 编号 int64 内存使用: ~456 KB ================================================== 转换后的数据类型: 城市 category 编号 int64 内存使用: ~120 KB # 内存使用大幅减少
Code-Erklärung:
- Der kategorische Datentyp weist jedem eindeutigen Wert eine ganzzahlige Kennung zu, wodurch im Vergleich zum Speichern vollständiger Zeichenfolgen viel Speicher gespart wird.
- Die ursprünglichen Daten haben 8000 Zeilen und verwenden etwa 456 KB Speicher; nach der Konvertierung sind es etwa 120 KB, wodurch etwa 75% des Speichers eingespart werden.
- Diese Methode eignet sich besonders für kategorische Variablen mit wenigen Werten.
Beispiel 4: In den Datetime-Typ konvertieren
Konvertieren Sie Zeichenfolgen in den Datetime-Typ, damit datumsbezogene Operationen ausgeführt werden können.
Beispiel
# Erstellen Sie ein DataFrame mit Datumszeichenfolgen
data = {
Date: ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04'],
'Sales': [100, 150, 120, 180]
}
df = pd.DataFrame(data)
print("Ursprünglicher Datentyp:")
print(df.dtypes)
print("=" * 50)
# Konvertieren Sie die Spalte "date" in den Datetime-Typ
df[Date] = pd.to_datetime(df[Date])
print(Konvertierte Datentypen:)
print(df.dtypes)
print("=" * 50)
print("Konvertierte Daten:")
print(df)
# Jetzt können Sie datumsbezogene Operationen ausführen
print(nMonat extrahieren:)
print(df[Date].dt.month)
Erwartete Ausgabe:
原始数据类型:
日期 object # 字符串类型
销量 int64
==================================================
转换后的数据类型:
日期 datetime64[ns] # 日期时间类型
销量 int64
==================================================
转换后的数据:
日期 销量
0 2024-01-01 100
1 2024-01-02 150
2 2024-01-03 120
3 2024-01-04 180
提取月份:
0 1
1 1
2 1
3 1
Name: 日期, dtype: int64
Code-Erklärung:
- Verwenden Sie
pd.to_datetime()um Zeichenfolgen in den Datetime-Typ zu konvertieren. - Nach der Konvertierung können Sie
.dtAccessor verwenden, um Datumsoperationen durchzuführen, wie das Extrahieren von Monat, Wochentag usw. - Hinweis: Obwohl Sie auch verwenden können
astype('datetime64[ns]'), aberpd.to_datetime()ist leistungsfähiger und flexibler.
Beispiel 5: Umgang mit Konvertierungsfehlern
Verwenden Sieerrors='ignore'Parameter zum Behandeln von Konvertierungsfehlern.
Beispiel
# Eine Series erstellen, die Werte enthält, die nicht in Ganzzahlen konvertiert werden können
s = pd.Series(['1', '2', 'hello', '4', 'world'])
print(“Rohdaten:”)
print(s)
print("=" * 50)
# Konvertierung versuchen. Die Verwendung von errors='raise' (Standard) löst eine Ausnahme aus.
try:
s_converted = s.astype(int)
except ValueError as e:
print(fKonvertierung fehlgeschlagen: {e})
print("=" * 50)
# Verwende errors='ignore', gib die Originaldaten zurück, wenn die Konvertierung fehlschlägt
s_converted = s.astype(int, errors='ignore')
print("Daten konvertiert mit errors='ignore':")
print(s_converted)
print("=" * 50)
# Verwende errors='coerce', um bei fehlgeschlagener Konvertierung mit NaN zu füllen
s_converted2 = s.astype(float, errors='coerce')
print("Daten konvertiert mit errors='coerce':")
print(s_converted2)
Erwartete Ausgabe:
原始数据: 0 1 1 2 2 hello # 无法转换为整数 3 4 4 world # 无法转换为整数 ================================================== 转换失败: invalid literal for int() with base 10: 'hello' ================================================== 使用 errors='ignore' 转换后的数据: 0 1 1 2 2 hello # 保持原值 3 4 4 world # 保持原值 ================================================== 使用 errors='coerce' 转换后的数据: 0 1.0 1 2.0 2 NaN # 无法转换,设为 NaN 3 4.0 4 NaN # 无法转换,设为 NaN
Code-Erklärung:
- Wenn ein String einen Wert enthält, der nicht in eine Zahl umgewandelt werden kann, wird standardmäßig eine Ausnahme ausgelöst
ValueErroreine Ausnahme. errors='ignore'behält die Originaldaten unverändert.errors='coerce'setzt den nicht konvertierbaren Wert aufNaN, eine gängige Methode zum Umgang mit unsauberen Daten.
Beispiel 6: In Boolean-Typ konvertieren
Daten in den Boolean-Typ konvertieren, häufig verwendet bei bedingter Filterung und logischen Operationen.
Beispiel
# Erstelle ein DataFrame mit 0 und 1
data = {
'Is Member': [0, 1, 1, 0, 1],
'Is Active': ['Ja', 'Nein', 'Ja', 'Ja', 'Nein']
}
df = pd.DataFrame(data)
print("Rohdaten:")
print(df)
print("Datentypen der Rohdaten:")
print(df.dtypes)
print("=" * 50)
# 0/1 in Boolean-Typ konvertieren
df['Is Member'] = df['Is Member'].astype(bool)
print("Datentypen nach der Konvertierung der Spalte Is Member:")
print(df.dtypes)
print(df)
print("=" * 50)
# "Yes"/"No" in den booleschen Typ konvertieren
df['Is Active'] = df['Is Active'].map({'Yes': True, 'No': False})
print("Daten nach der Konvertierung der Spalte Is Active:")
print(df)
print(df.dtypes)
Erwartete Ausführungsergebnisse:
原始数据: 是否会员 是否激活 0 0 是 1 1 否 2 1 是 3 0 是 4 1 否 ================================================== 转换是否会员列后的数据类型: 是否会员 bool 是否激活 object ================================================== 转换是否激活列后的数据: 是否会员 是否激活 0 True True 1 True False 2 True True 3 False True 4 True False
Codeanalyse:
- 0 kann umgewandelt werden in
False, 1 umgewandelt inTrue。 - Für Strings wie "Yes"/"No" müssen Sie verwenden
map()um zu konvertieren. - Nach der Konvertierung kann boolesche Indizierung zum schnellen Filtern verwendet werden.
Hinweise
astype()Standardmäßig wird ein neues Objekt zurückgegeben, und die Originaldaten werden nicht geändert. Wenn Sie in-place ändern möchten, können Siecopy=FalseParameter, aber dies kann die Originaldaten beeinflussen.- Beim Konvertieren von Gleitkommazahlen in Ganzzahlen wird der Dezimalteil abgeschnitten, nicht gerundet.
- Wenn Zeichenfolgen in Zahlen umgewandelt werden, stellen Sie sicher, dass die Zeichenfolge ein gültiges numerisches Format hat, andernfalls wird eine Ausnahme ausgelöst.
- Verwendung
errors='coerce'ist die empfohlene Methode zum Umgang mit fehlerhaften Daten und kann ungültige Werte umwandeln inNaN, dann verwenden Siefillna()zum Auffüllen. - Bei Spalten mit vielen doppelten Werten kann die Konvertierung in einen kategorialen Typ den Speicherverbrauch erheblich reduzieren.
Andere Erweiterungen