Lors de l'analyse de données avec python, il est courant (probablement) d'utiliser un module appelé pandas.
Dans les pandas, les données peuvent être stockées dans des types appelés Series et Dataframe. La série est utilisée pour stocker des données unidimensionnelles et Dataframe est utilisé pour stocker des données bidimensionnelles. Ils sont comme des tableaux unidimensionnels haute performance et des tableaux bidimensionnels, respectivement. Haute performance signifie que chaque ligne et colonne peut être nommée, et de nombreuses méthodes sont disponibles.
# | Hachiman | Yukino | Yui |
---|---|---|---|
Math | 8 | 90 | 10 |
langue nationale | 88 | 100 | 50 |
Anglais | 38 | 95 | 35 |
Lorsque vous exprimez cela dans un tableau à deux dimensions, il est difficile de gérer des caractères tels que "Hachiman", "Yukino", "Yui", "Mathematics", "Kokugo" et "English". Dans Dataframe, cela peut être représenté par des colonnes et un index.
Cependant, ce type a diverses spécifications gênantes, et j'ai trébuché depuis le début. Ceci est un manuel d'utilisation des pandas super rudimentaire que j'ai créé pour moi-même en tant que super débutant. La version de python est 3.5.2 (j'utilise Anacondan 4.2.0 au lieu de python standard) La version des pandas est la 0.18.1 Le code imagine une situation fonctionnant sur iPython 5.1.0.
J'ai tout mis à Anaconda. (Anaconda est comme python + une bibliothèque populaire, y compris Numpy et iPython) En plus de cela, vous pouvez le mettre dans pip ou quelque chose comme ça.
Puisque pandas est un module, il doit être importé.
In[1]: import pandas
Cependant, peu importe où vous regardez les sites de référence, les pandas semblent être chargés sous le nom pd, je vais donc le suivre ici également.
In[2]: import pandas as pd
# | Hachiman |
---|---|
Math | 8 |
langue nationale | 88 |
Anglais | 38 |
Par exemple, supposons que vous disposiez d'un tel tableau unidimensionnel. La première chose qui vous vient à l'esprit lorsque vous voyez cela est de créer une liste.
HachimanList = [8, 88, 38]
Il est facile d'accéder aux éléments de ceci.
Si vous voulez un score de langue nationale,
ʻDans [4]: Hachiman [1] `
ʻOut [4]: 88` sera retourné.
Le problème avec ceci est qu'il manque des informations telles que les scores «mathématiques».
Bien sûr, vous pouvez créer des dictionnaires, des objets et des taples nommés, mais aucun d'entre eux ne convient au traitement de données à grande échelle.
La solution à cela est la série pandas.
In[5]: HachimanSeries = pd.Series(HachimanList, index = ["math", "japanese", "english"])
de cette façon,
variable= pd.Series(Tableau de données, index =Un tableau de noms rampants)
Peut être spécifié avec.
Quand j'essaye de sortir ceci,
In[6]: HachimanSeries Out[6]: math 8 japanese 88 english 38 dtype: int64`
Vous pouvez voir que chaque élément reçoit un nom et une sortie.
Notez que «dtype» est le type de données du tableau entier. (Dans Numpy, les types entiers sont affectés à plusieurs types d'entiers différents. Int64 est l'un d'entre eux.)
Et si vous ne spécifiez pas d'index? Une erreur sera-t-elle renvoyée?
In[7]: YukinoSeries = pd.Series([90, 100, 95]) In[8]: YukinoSeries Out[8]: 0 90 1 100 2 95 dtype: int64
Apparemment, «index» a une valeur par défaut qui augmente de 0.
Notez que «index» peut être ajouté plus tard.
In[9]: YukinoSeries.index = ["math", "japanese", "english"] In[10]: YukinoSeries Out[10]: math 90 japanese 100 english 95 dtype: int64
Il existe également une méthode utilisant un dictionnaire.
In[11]: YuiSeries = pd.Series({"math":10, "japanese":50, "english":35}) In[12]: YuiSeries Out[12]: english 35 japanese 50 math 10 dtype: int64
Dans ce cas, il est inévitable que la commande soit en panne.
## Extraire la valeur de la série
La récupération des valeurs de la série est presque identique à un tableau normal.
#### Spécification des éléments
Le nième élément du tableau est récupéré par ʻarray [n-1] `.
De même, le nième élément de Series est
In[13]: HachimanSeries[2] Out[14]: 38
Il est également possible de le transmettre à une variable et de le calculer.
In[15]: HachimanMath = HachimanSeries[0] In[16]: 40 <= HachimanMath Out[16]: False
Cependant, le type de HachimanMath est `numpy.int64` au lieu de l'habituel ʻint`.
In[17]: type(HachimanMath) Out[17]: numpy.int64
Vous pouvez également utiliser le ʻarray [-1] `.
Il est facile de récupérer plusieurs variables.
In[18]: HachimanSeries[0:2] Out[18]: [8, 38]
Les lecteurs qui ont exécuté l'exemple de code dans leur propre environnement sans avaler mes résultats auraient dû remarquer que je me suis enfin présenté et que j'ai écrit un mensonge ici.
Ce code `HachimanSeries [0: 2]` retourne le résultat de l'exécution de type Series car il ressemble à `pandas.core.series.Series`.
In[18]: HachimanSeries[0:2] Out[18]: math 8 japanese 88 dtype: int64
In[19]: type(HachimanSeries[0:2]) Out[19]: pandas.core.series.Series
Résumé
- Si vous spécifiez un élément seul, vous obtiendrez un résultat d'exécution comme le type ʻint` appelé` numpy.int64`.
--Si vous spécifiez un élément dans une plage, vous obtiendrez un type `Series` appelé` pandas.core.series.Series`.
Certaines personnes peuvent trouver cela un peu désagréable, mais si vous y réfléchissez bien
- `int`->`numpy.int64`
- `list` ->`pandas.core.series.Series`
C'est la même chose qu'une opération de tableau normale, simplement parce qu'il y a une correspondance.
Ainsi, bien sûr, un type `Series` avec un seul élément peut être récupéré de la même manière qu'un seul tableau est récupéré à partir d'un tableau.
In[20]: HachimanSeries[1:1+1] Out[20]: japanese 88 dtype: int64
In[21]: type(HachimanSeries[1:1+1]) Out[21]: pandas.core.series.Series
Pour spécifier un élément, vous pouvez également le spécifier par le nom «index» comme un type de dictionnaire.
In[22]: HachimanSeries["math"] Out[22]: 8
Au fait, si vous utilisez ʻarray [:: -1] `, le résultat inverse sera retourné.
Étonnamment, cela peut même être rangé en utilisant le nom «index».
In[23]: HachimanSeries["math":"english"] Out[23]: math 8 japanese 88 english 38 dtype: int64
C'est quelque chose qui ne peut pas être fait avec les collections.OrderedDict ainsi que les dictionnaires ordinaires, et montre les hautes performances de Series-tan.
Si vous voulez accéder au nom de ʻindex`, traitez` Series.index` comme un tableau.
In[24]:HachimanSeries.index Out[24]:Index(['math', 'japanese', 'english'], dtype='object')
In[25]: HachimanSeries.index[1] Out[25]: 'japanese'
In[26]: HachimanSeries.index.[1:2] Out[26]: Index(['japanese'], dtype='object')
Jusqu'à présent, nous avons expliqué que Series peut récupérer des éléments comme un tableau ou un dictionnaire normal.
#### Obtenez la série que vous voulez
Que faire si vous souhaitez récupérer des données dans "Series"?
En d'autres termes, vous voulez seulement «math» et «japonais», ou vous voulez seulement «math» et «anglais».
Ou vous voulez "math" à deux endroits.
(Ressentez-vous un tel besoin maintenant ...)
Pour `math` et` japonais`,` HachimanSeries [0: 2] `fera l'affaire. Cependant, quand il s'agit de «math» et «anglais», c'est assez ennuyeux.
Je l'ai inventé là-bas.
In[27]: HachimanSeries["math"]+HachimanSeries["english"]
Que dis-tu de ça! !!
Out[27]: 46
La réalité est impitoyable, mais cette sortie hoche la tête. En premier lieu, le résultat de `HachimanSeries [" math "]` est `numpy.int64`.
Si c'est le cas,
In[28]: HachimanSeries[0:0 + 1] + HachimanSeries[2:2 + 1]
Essayer.
Out[28]: english NaN math NaN dtype: float64
Comme vous pouvez le voir, il a craché des déchets industriels.
Ceci est probablement dû au fait que l'ajout dans "Series" "ajoute les mêmes index".
Et pour les éléments qui ne sont pas communs, remplissez `NaN` pour le moment.
En réalité
In[29]: HachimanSeries[0:0 + 2] + YukinoSeries[1:1 + 2] Out[29]: english NaN japanese 188.0 math NaN dtype: float64
Sera.
Alors, comment préférez-vous uniquement «math» et «anglais» dans la même série?
La réponse est d'écrire un double «[]».
In[30]: HachimanSeries[[0, 2]] Out[30]: math 8 english 38 dtype: int64
Peut-être que ceci «[[]]» n'a rien à voir avec la notation du tableau quadratique. Il semble que je voulais juste utiliser la notation «[[]]».
(`HachimanSeries [(0,2)]` ne passe pas, donc ça ne devait pas être quelque chose comme un itérateur. Il est considéré comme identique à un tableau en termes de traitement.)
Si vous voulez juste souligner votre score en mathématiques
In[31]: HachimanSeries[["math","math","math","math","math"]] Out[31]: math 8 math 8 math 8 math 8 math 8 dtype: int64
Tu peux le faire. (Ici, j'ai spécifié directement le nom «index»)
La même chose est vraie pour «index».
In [32]: HachimanSeries.index[[1,2]] Out[32]: Index(['japanese', 'english'], dtype='object')
Jusqu'à présent, j'ai appris à utiliser «[[]]» pour créer une nouvelle série qui extrait uniquement l'index »souhaité.
### Réécriture des éléments de la série
Vous constaterez peut-être plus tard que le contenu de la «série» et le nom «index» étaient incorrects.
Il existe un moyen d'écraser la version modifiée `Series` avec le même nom, mais en fait, elle peut être modifiée aussi facilement qu'un tableau.
Tout d'abord, le code pour en réécrire un seul.
In[33]:HachimanSeries[1] Out[33]: 88
In[34]: HachimanSeries[1] = 98
In[35]: HachimanSeries[1] Out[35]: 98
Puis réécrivez la plage spécifiée
In[36]: HachimanSeries Out[36]: math 8 japanese 98 english 38 dtype: int64
In[37]: HachimanSeries[1:1+2] = [89,33]
In[38]: HachimanSeries Out[38]: math 8 japanese 89 english 33 dtype: int64
Ici, je me fâche s'il n'y a pas de chiffres sur les côtés gauche et droit.
ValueError (Omis) ValueError: cannot set using a slice indexer with a different length than the value
Cependant, ils peuvent être alignés sur la même valeur.
In[40]: HachimanSeries[0:0+3] = 0
In[41]: HachimanSeries Out[40]: math 0 japanese 0 english 0 dtype: int64
Enfin, réécrire «index»
In[42]: HachimanSeries.index[1] = "Japanese" Out[42]: HachimanSeries math 0 Japanese 0 english 0 dtype: int64
En fait, ce n'est pas le cas.
TypeError: Index does not support mutable operations
Comme vous pouvez le voir, «index» semble être immuable. (Même si vous faites quelque chose de similaire avec une chaîne de caractères, vous vous mettez en colère)
Il n'y a donc pas d'autre choix que de l'écraser.
In[43]: HachimanSeries.index = ["Math","Japanese","English"]
In[44]: HachimanSeries Out[44]: Math 0 Japanese 0 English 0 dtype: int64
Eh bien, réinitialisons-le après avoir examiné.
In[45]: HachimanSeries[0:0+3] = [8,88,38]
In[46]: HachimanSeries.index = ["math", "japanese", "english"] Out[46]: math 8 japanese 88 english 38 dtype: int64
Ce qui précède est le fonctionnement de base de la série.
C'est plus long que prévu, je parlerai donc des méthodes Dataframe et Series dans un prochain article.
Recommended Posts