Numpy scheint zwischen str
und object
Typen zu unterscheiden. Zum Beispiel kann ich ::
Wobei dtype ('S') und dtype ('O') jeweils str
und object
entsprechen.
Allerdings scheinen Pandas diese Unterscheidung zu fehlen und erzwingen str
bis object
. ::
Das Erzwingen des Typs auf dtype('S')
hilft auch nicht. ::
Gibt es eine Erklärung für dieses Verhalten?
Numpys string dtypes sind keine Python-Strings.
Daher verwendet pandas
absichtlich native Python-Strings, die ein Objekt dtype erfordern.
Zunächst möchte ich ein wenig von dem zeigen, was ich meine, wenn numpys Strings anders sind:
%Vor% Nun ist 'x' ein numpy
string dtype (feste Breite, c-ähnliche Zeichenfolge) und y
ist ein Array von nativen Python-Strings.
Wenn wir versuchen, über 7 Zeichen hinauszugehen, sehen wir einen unmittelbaren Unterschied. Die string dtype-Versionen werden abgeschnitten:
%Vor%Während die Versionen des Objekt dtype eine beliebige Länge haben können:
%Vor% Als nächstes können die Zeichenfolgen |S
dtype den Unicode nicht korrekt halten, obwohl es auch einen Unicode-String-Dtyp fester Länge gibt. Ich werde ein Beispiel für den Moment überspringen.
Schließlich sind numpys Strings tatsächlich änderbar, während Python-Strings nicht veränderbar sind. Zum Beispiel:
%Vor% Aus all diesen Gründen hat pandas
entschieden, C-like Strings fester Länge niemals als Datentyp zuzulassen. Wie Sie bemerkt haben, funktioniert der Versuch, eine Python-Zeichenkette in eine fixed-with-numpy-Zeichenkette zu zwingen, nicht in pandas
. Stattdessen werden immer native Python-Zeichenfolgen verwendet, die sich für die meisten Benutzer intuitiver verhalten.