web-dev-qa-db-fra.com

Forcer pandas .iloc pour renvoyer une trame de données à une seule ligne?

À des fins de programmation, je veux .iloc pour renvoyer systématiquement une trame de données, même lorsque la trame de données résultante n'a qu'une seule ligne. Comment y parvenir?

Actuellement, .iloc renvoie une série lorsque le résultat n'a qu'une seule ligne. Exemple:

In [1]: df = pd.DataFrame({'a':[1,2], 'b':[3,4]})

In [2]: df
Out[2]:
   a  b
0  1  3
1  2  4

In [3]: type(df.iloc[0, :])
Out[3]: pandas.core.series.Series

Ce comportement est mauvais pour 2 raisons:

  • Selon le nombre de lignes choisies, .iloc peut renvoyer une série ou une trame de données, m'obligeant à vérifier manuellement cela dans mon code

- .loc, d'un autre côté, renvoie toujours une trame de données, rendant pandas incohérent en lui-même (mauvaise information, comme indiqué dans le commentaire)

Pour l'utilisateur R, cela peut être accompli avec drop = FALSE, ou en utilisant le tibble de tidyverse, qui renvoie toujours une trame de données par défaut.

19
Heisenberg

Utilisez des supports doubles,

df.iloc[[0]]

Production:

   a  b
0  1  3

print(type(df.iloc[[0]])

<class 'pandas.core.frame.DataFrame'>

Court pour df.iloc[[0],:]

35
Scott Boston

Spécifiez une tranche pour l'index de ligne.

df.iloc[0:1]

Il renvoie une trame de données à une seule ligne.

   a  b
0  1  3
3
cs95