[PYTHON] Les pandas se comportent légèrement différemment selon la version

introduction

Pandas est une bibliothèque très utile, mais lorsque la version change, ce qui fonctionnait auparavant peut ne pas fonctionner. Cette fois, je donnerai deux points comme cas où 0,24 ⇒ 1,0.

Ce ① ix ne peut pas être utilisé.

Tout d'abord, à 0,24. Créons un bloc de données composé de colonnes «a» et «b» et spécifions les colonnes avec ix.

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

Peut être utilisé normalement. Puis à 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'

Vous ne pouvez pas l'utiliser. Mais ne vous précipitez pas. Vous pouvez utiliser loc au lieu de ix.

(2) Une erreur se produit lorsqu'une colonne inexistante est spécifiée dans loc.

Maintenant, spécifions simplement la colonne inexistante «c». Pour 0,24.

0.24


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

Il semble créer automatiquement une colonne et la remplir avec "NaN". Êtes-vous trop intelligent?

Suivant dans 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'

Une erreur clé s'est produite. Cela peut être strict avec cela. En guise de réponse, il semble préférable de vérifier à l'avance si la clé existe dans la colonne.

finalement

Cette fois, j'ai présenté deux exemples qui ont été trouvés, mais il semble que le comportement a changé dans de nombreux autres détails, il est donc préférable de vérifier les changements de manière exhaustive par ce qui suit. https://pandas.pydata.org/docs/whatsnew/v1.0.0.html

Recommended Posts

Les pandas se comportent légèrement différemment selon la version
En Python, changez le comportement de la méthode en fonction de la façon dont elle est appelée
rsync Le comportement change en fonction de la présence ou de l'absence de la barre oblique de la source de copie
Remplissez les valeurs aberrantes avec NaN en fonction des quadrants dans Pandas
Différence de résultats en fonction de l'argument du multiprocessus.