2017-10-07 4 views
2

Dans le code suivant, j'importe un fichier csv dans la bibliothèque pandas de Python et affiche les 5 premières lignes, et interroge la 'forme' de la trame de données pandas.Pourquoi `head` a-t-il besoin de`() `et de` shape`?

import pandas as pd 
data = pd.read_csv('my_file.csv') 
data.head() #returns the first 5 rows of the dataframe 
data.shape # displays the # of rows and # of columns of dataframe 
  1. Pourquoi est-ce que la méthode head() nécessite des parenthèses vides après head mais shape ne fonctionne pas? Est-ce que cela a à voir avec leurs types? Si j'appelais head sans le suivre avec les parenthèses vides, je n'aurais pas le même résultat. Est-ce que head est une méthode et shape est juste un attribut?

  2. Comment pourrais-je généraliser la réponse à la question ci-dessus pour le reste de Python? J'essaie d'apprendre non seulement sur les pandas ici, mais sur Python en général. Par exemple, une phrase telle que « Quand _____ est le cas, un doit inclure des parenthèses vides si aucun argument sera fourni, mais pour d'autres attributs on n'a pas à

    ?
+0

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.head.html – Wen

+1

* Est-ce que 'head' est une méthode et' shape' est juste un attribut? * * * Oui. ** – zondo

+0

@zondo. Merci. Quelle est la différence entre un "attribut" et une "propriété"? – Semihcan

Répondre

0

La raison pour laquelle la tête est une méthode et non un attribut est très probablement liée à la performance. Dans le cas où la tête serait un attribut, cela signifierait que chaque fois que vous vous disputeriez une base de données, les pandas devraient précalculer la tranche de données et la stocker dans l'attribut head, ce qui serait un gaspillage de ressources. La même chose vaut pour les autres méthodes avec des parenthèses vides.

En cas de forme, il est fourni en tant qu'attribut puisque cette information est essentielle à toute manipulation de données, il est donc précalculé et disponible en tant qu'attribut.

1

Lorsque vous appelez vous appellent la méthode head(self) sur l'objet data,

Cependant, lorsque vous écrivez data.shape, vous faites référence à un attribut public de l'objet data

Il est bon de garder à l'esprit que il existe une différence nette entre les méthodes et les attributs d'objet. Vous pouvez lire à ce sujet here