[PYTHON] Pandas verhalten sich je nach Version etwas anders

Einführung

Pandas ist eine sehr nützliche Bibliothek, aber wenn sich die Version ändert, funktioniert das, was früher funktioniert hat, möglicherweise nicht. Dieses Mal werde ich zwei Punkte als Fall geben, wenn 0,24 ⇒ 1,0.

Das ① ix kann nicht verwendet werden.

Erstens bei 0,24. Lassen Sie uns einen Datenrahmen erstellen, der aus den Spalten 'a' und 'b' besteht, und die Spalten mit ix angeben.

0.24


>>>a = pd.DataFrame([[1,2],[3,4]], index=[1,2], columns=['a', 'b'])
>>> a.ix[:, ['a','b']]
   a  b
1  1  2
2  3  4

Kann normal verwendet werden. Dann bei 1,0.

1.0


>>> a.ix[:, ['a','b']]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\ProgramData\Anaconda3\envs\padnas1\lib\site-packages\pandas\core\generic.py", l

ine 5273, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'ix'

Du kannst es nicht benutzen. Aber beeil dich nicht. Sie können loc anstelle von ix verwenden.

(2) Ein Fehler tritt auf, wenn in loc eine nicht vorhandene Spalte angegeben ist.

Geben wir nun einfach die nicht vorhandene Spalte 'c' an. Für 0,24.

0.24


>>> a.loc[:, ['a','c']]
   a   c
1  1 NaN
2  3 NaN

Es scheint automatisch eine Spalte zu erstellen und diese mit 'NaN' zu füllen. Bist du zu schlau?

Weiter in 1.0.

1.0


>>> a.loc[:, ['a','c']]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\ProgramData\Anaconda3\envs\padnas1\lib\site-packages\pandas\core\indexing.py",
line 1760, in __getitem__
    return self._getitem_tuple(key)
  File "C:\ProgramData\Anaconda3\envs\padnas1\lib\site-packages\pandas\core\indexing.py",
line 1287, in _getitem_tuple
    retval = getattr(retval, self.name)._getitem_axis(key, axis=i)
  File "C:\ProgramData\Anaconda3\envs\padnas1\lib\site-packages\pandas\core\indexing.py",
line 1952, in _getitem_axis
    return self._getitem_iterable(key, axis=axis)
  File "C:\ProgramData\Anaconda3\envs\padnas1\lib\site-packages\pandas\core\indexing.py",
line 1593, in _getitem_iterable
    keyarr, indexer = self._get_listlike_indexer(key, axis, raise_missing=False)
  File "C:\ProgramData\Anaconda3\envs\padnas1\lib\site-packages\pandas\core\indexing.py",
line 1550, in _get_listlike_indexer
    self._validate_read_indexer(
  File "C:\ProgramData\Anaconda3\envs\padnas1\lib\site-packages\pandas\core\indexing.py",
line 1652, in _validate_read_indexer
    raise KeyError(
KeyError: 'Passing list-likes to .loc or [] with any missing labels is no longer supported

, see https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-

reindex-listlike'

Ein Schlüsselfehler ist aufgetreten. Dies kann dabei streng sein. Als Antwort scheint es besser, im Voraus zu prüfen, ob der Schlüssel in der Spalte vorhanden ist.

Schließlich

Dieses Mal habe ich zwei Beispiele vorgestellt, die zufällig gefunden wurden, aber es scheint, dass sich das Verhalten in vielen anderen Details geändert hat. Daher ist es besser, die Änderungen anhand der folgenden Punkte umfassend zu überprüfen. https://pandas.pydata.org/docs/whatsnew/v1.0.0.html

Recommended Posts

Pandas verhalten sich je nach Version etwas anders
Ändern Sie in Python das Verhalten der Methode je nach Aufruf
rsync Das Verhalten ändert sich abhängig vom Vorhandensein oder Fehlen des Schrägstrichs der Kopierquelle
Füllen Sie Ausreißer mit NaN basierend auf Quadranten in Pandas
Unterschied in den Ergebnissen abhängig vom Argument von multiprocess.Process