Pandas-Datentypen

Pandas-Datentypen

  • Künstliche Intelligenz
6 Minuten Lesezeit Aktualisiert Dec 16, 2020

Auf einen Blick: Pandas-Datentypen sind entscheidend für ein effizientes Datenmanagement in Python und ermöglichen eine präzise Kontrolle über numerische Genauigkeit und Speichernutzung. Der Leitfaden untersucht verschiedene Pandas-Datentypen, darunter ganze Zahlen, Floatzahlen, Daten und kategoriale Daten.

  • Pandas optimiert den Speicherverbrauch, indem es geeignete Datentypen für numerische Arrays auswählt.
  • Das Verständnis von Datentypen hilft, Präzisionsprobleme zu vermeiden und die Leistung zu steigern.

Reguläres Python hat nicht viele Datentypen. Es enthält nur String-, Float-, Binär- und komplexe Zahlen. Es gibt keine längeren oder kurzen Zahlen. Es gibt keine 32- oder 64-Bit-Zahlen. Glücklicherweise ist das in den meisten Fällen egal. Es ist nur dann wichtig, wenn man absolute Präzision benötigt oder den minimalen Speicherbedarf für die Speicherung eines Wertes verwenden möchte.

Das ist wichtig, wenn man mit sehr großen Pandas-Arrays arbeitet, da Pandas, wenn man sich recht erinnert, durch die Speichergröße begrenzt ist. Man möchte also nicht 64 Bit verwenden, wenn man nur 8 Bit benötigt.

Python-Numerische Präzision

Größe und Präzision sind unterschiedlich. Aber es lohnt sich, sich die Präzision anzuschauen, um einige der Einschränkungen von Python zu verstehen. Präzision bedeutet die Anzahl der Dezimalstellen.

Zum Beispiel ist 1/3 im Dezimalformat die unendliche Reihe 0,3333333333333... Der Computer ist nicht unendlich, daher stoppt Python irgendwann die Dezimalentwicklung und rundet diese Zahl ab.

Dieses Verhalten hat einige Eigenheiten.

Wann ist Null gleich Null?

Schau dir diesen Code an. Er berechnet die Quadratwurzel von 2 (oder einer anderen Zahl) mit einer 3.000 Jahre alten Technik. Der Algorithmus beendet, wenn die Differenz zwischen zwei Zahlen 0 beträgt.

    a=2
a1 = (a/2)+1
b1 = a/a1
aminus1 = a1
bminus1 = b1
while (aminus1-bminus1 != 0):
an = 0.5 * (aminus1 + bminus1)
bn = a / an
aminus1 = an
bminus1 = bn
print(an,bn,an-bn)

produziert:

    1.5 1.3333333333333333 0.16666666666666674
1.4166666666666665 1.411764705882353 0.004901960784313486
1.4142156862745097 1.41421143847487 4.2477996395895445e-06
1.4142135623746899 1.4142135623715002 3.1896707497480747e-12
1.414213562373095 1.4142135623730951 -2.220446049250313e-16

Aber man sieht, oben oben, dass die Differenz niemals 0 ist. Stattdessen rundet der Computer offenbar in diesem Fall auf 16 signifikante Ziffern ab. Man sieht das – wenn er die Antwort 1,414213562373095 erreicht, läuft der Code weiter. Das liegt daran, dass die Differenz zwischen den beiden Werten trotz des arithmetischen Mittelwerts der beiden Werte nicht auf 0 konvergiert.

Wenn du verstehen möchtest, wie dieser Algorithmus funktioniert, schau dir diesen Clip an:

play

  Falls du eine präzise Kontrolle über die Anzahl der Dezimalstellen möchtest, kannst du die Python-Klasse Decimal verwenden. So läuft der Code nicht in einer Endlosschleife.

    from decimal import *
getcontext().prec = 5
a=Decimal(2)
a1 = Decimal((a/2)+1)
b1 = Decimal(a/a1)
aminus1 = a1
bminus1 = b1
i=0
while (Decimal(aminus1-bminus1) != Decimal(0)):
an = Decimal(Decimal(0.5) * (aminus1 + bminus1))
bn = Decimal(a / an)
aminus1 = an
bminus1 = bn
i=i+1
print(i,an,bn,an-bn)

Es läuft dreimal und hört auf, wobei er sich auf den Wert von 1,4142 als Quadratwurzel von 2 festlegt. Wir könnten mehr Dezimalstellen hinzufügen, um mehr Präzision zu erzielen.

    1 1.5 1.3333 0.1667

2 1.4166 1.4118 0.0048

3 1.4142 1.4142 0.0000

Numerische Datentypen von NumPy & Pandas

NumPy geht noch viel weiter als das. Es bietet eine Low-Level-Schnittstelle zu C-Typ-Numeriktypen. (Mit anderen Worten, jene Zahlen, die man beim Schreiben von Code in der C-Sprache deklarieren könnte). Auch wenn wir diese hier noch nicht besprechen werden, gibt es auch verschiedene Datentypen an, die geeignet sind für:

  • Zeitreihe
  • Intervalle
  • Daten
  • Kategoriale Daten
  • Und so weiter.

Unten ist die vollständige Liste. Links ist der Objektname. Rechts ist der String-Alias zu sehen.

Datentyp Alias
Int64Dtype, ... 'int8', 'int16', 'int32', 'int64', 'UInt8', 'UInt16', 'UInt32', 'UInt64'

 

IntervalDtyp

'Interval', 'Interval', 'Interval[<numpy_dtype>]', 'Interval[datetime64[ns, <tz>]]', 'Interval[timedelta64[<freq>]]'
DatetimeTZDtype 'datetime64[ns, <tz>]'
KategorialDtyp 'Kategorie'
PeriodDtyp 'Period[<freq>]', 'Period[<freq>]'
SparseDtype 'Sparse', 'Sparse[int]', 'Sparse[float]'
BooleanDtyp 'boolesch'
StringDtype 'String'
keines der oben genannten 'Objekt'

Ganze Zahlen & Floats

Hier zum Beispiel haben wir ein Datum, eine Gleitsam, ein Boolesch und eine ganze Zahl. Wir können Pandas erlauben, für jeden numerischen Typ eine Skala auszuwählen. Oder wir geben das explizit an. Wenn man es nicht explizit angibt, wählt Pandas entweder eines oder verwendet das generische Objekt.

    import pandas as pd
import datetime
df= pd.DataFrame({
"a": datetime.datetime(2020,12,14),
"b": 1.000003,
"c": True,
"d": 3
}, index=[1,2,3,4])

Fragen Sie Pandas nach den Datentypen:

    df.dtypes

Man sieht, dass es 64 Bit auswählt, um 1,000003 und 3 zu speichern. Man benötigt nur 2 Bits, um die Zahl 3 zu speichern, aber es gibt keine Option für 2-Bit-Zahlen. Deshalb würden wir int8 verwenden und 8 Bits, wenn Platz ein Problem wäre.

    a    datetime64[ns]
b           float64
c              bool
d             int64
dtype: object

Erstellen Sie nun eine Pandas-Reihe aus 4 ganzen Zahlen und erzwingen Sie sie zu einer 8-Bit-Zahl.

    s=pd.Series([10,20,30,40],index=[1,2,3,4]).astype('int8')

Verwenden Sie dtypes , um die Datentypen anzuzeigen:

    s.dtypes

Ergebnisse in:

    dtype('int8')

Der String 'int8' ist ein Alias. Du kannst den dtype auch mit der Pandas-Objektrepräsentation dieses pd zuweisen. Int64Dtype.

    t = pd.Int64Dtype
pd.Series([1,2,3,4], dtype=t)

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Künstliche Intelligenz

Interessieren Sie sich für mehr von BMC?

The Brief ist unsere monatliche E-Mail zum Mainframe und zur Enterprise-Orchestrierung: Recherchen, Kundenberichte, Produktnachrichten, Events.

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Sie haben The Brief abonniert

Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.