C'est un .ix
utile pour référencer un DataFrame pandas, mais si vous ne le comprenez pas, vous tomberez dans un piège.
Par exemple, supposons que vous ayez le DataFrame suivant.
from pandas import DataFrame
df = DataFrame(
[['a0', 'b0'], ['a1', 'b1'], ['a2', 'b2']],
index=[2, 4, 6],
columns=['a', 'b'])
a | b | |
---|---|---|
2 | a0 | b0 |
4 | a1 | b1 |
6 | a2 | b2 |
Et si vous voulez faire référence à la deuxième (à partir de 0) ligne
ʻa colonneici? Le résultat attendu est «a2».
.ix` accepte à la fois l'ordre et l'index, donc si vous vous y référez comme ci-dessous ...
df.ix[2, 'a']
Le résultat sera «a0». Ceci est dû au fait que la référence à laquelle un numéro est attribué dans «.ix» va à l'index si l'index existe, et pour voir l'ordre s'il n'existe pas dans l'index.
Cette ambiguïté dans la référence .ix
semble être obsolète dans la version 0.20 de pandas.
Ce n'est peut-être pas la meilleure solution, mais je vais essayer d'y faire référence par «.iloc». Cependant, comme cela ne peut être référencé que dans l'ordre, utilisez pandas.Index.get_loc ensemble. Il s'agit d'une méthode qui recherche les noms de lignes (ou les noms de colonnes) et renvoie l'ordre.
df.iloc[2, df.columns.get_loc('a')]
Le résultat attendu, ʻa2`, est maintenant renvoyé.
Dans l'exemple ci-dessus, le nom de la colonne est spécifié, mais lorsque vous spécifiez le nom de la ligne, procédez comme suit.
df.iloc[df.index.get_loc(6), 0]
Si vous connaissez à l'avance les noms des lignes et des colonnes, vous pouvez utiliser .loc
normalement.
df.loc[6, 'a']
De même, .iloc
convient si vous connaissez à l'avance l'ordre des lignes et des colonnes.
df.iloc[2, 0]
Si vous ne comprenez pas le comportement de .ix
, il se comportera involontairement.
Même si vous comprenez le comportement, vous devez connaître le contenu de l'index, il semble donc préférable d'éviter d'utiliser .ix
autant que possible.
Recommended Posts