XD blog

blog page

pandas


2018-01-03 Small change and potentially big impact (pandas)

pandas updated its interface in its version 0.22. More particularly v0.22.0 (December 29, 2017),

print(pd.Series([]).sum())
0.0  # It was nan in 0.21.

This is typically the kind of change which could have a huge impact on many functions if you don't have unit tests to capture that. According to the documentation of sum, the previous behaviour can be retrieved by adding min_count=1.

print(pd.Series([]).sum(min_count=1))
nan

And in 10 days, computers might slow down: Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign. See also KASLR is Dead: Long Live KASLR.

2017-11-05 streaming pandas dataframe

pandas is widely used by data scientists. It is one of the modules which contributed a lot to the Python ecosystem to manipulate data. It is not perfect, a dataset takes in memory three times the space it takes on disk in average and reading a couple of gigabytes is necessarily fast. However, a couple of gigabytes is not enough to think about stronger approaches such parallelization (dask, ...) but with a little bit of overhead for such size. All I wanted was the same functionalities as pandas but implemented in a streaming way. No need to load the whole datasets in memory, no need to wait for the data to be fully loaded in memory. That's why I started pandas_streaming.

import pandas
df = pandas.DataFrame([dict(cf=0, cint=0, cstr="0"),
                       dict(cf=1, cint=1, cstr="1"),
                       dict(cf=3, cint=3, cstr="3")])

from pandas_streaming.df import StreamingDataFrame
sdf = StreamingDataFrame.read_df(df)

for df in sdf:
    # process this chunk of data
    # df is a dataframe
    print(df)

The module will continue to grow probably not as fast as I would like it to.

2014-07-27 Les DataFrame en Python

J'utilise les DataFrame quasiment quotidiennement pour manipuler les données. Je n'écris plus de code pour lire ou écrire des données. Je n'écris plus de fichiers plats pour récupérer les données sous Excel. J'écris beaucoup moins de boucles. Je manipule des fichiers de plus d'un millions de lignes. J'utilise beaucoup moins Excel. Les premières opérations qu'on applique sont toujours les mêmes et elles sont résumées ici : DataFrame et Matrice (autre mise en forme).

2014-06-03 pandas and openpyxl are not compatible anymore

I use a lot openpyxl with pandas. But the new version of openpyxl is not compatible anymore with pandas. So be careful to install an older version until this compatibility issue is fixed:

pip install openpyxl==1.8.6

2014-02-26 Installer Python pour faire des statistiques

L'environnement que je suggère est celui que j'utilise pour préparer mes cours. Il permet d'utiliser les outils que je propose et d'obtenir un espace de travail équivalent à celui que propose R. Plusieurs options sont possibles :

Je poursuivrai par l'installation de pyensae, et je terminerai par la configuration de l'éditeur SCite qui est, de mon point de vue, le plus simple éditeur qui soit mais il fait bien ce pour quoi il est fait.

2014/10/25

Si je devais choisir une distribution, ce serait Anaconda. C'est la plus à jour et la plus complète. Une fois installée, elle devient la distribution par défaut sous Linux. Cela évite les confusions entre les différentes versions de Python (Python 2.7 est installée par défaut). Sous Windows, elle est plus complète que WinPython. Elle inclut notamment le package paramiko dont je me sers pour ouvrir une connexion SSH avec un serveur Linux et utiliser PIG.

Préliminaire

Il existe deux numéros de versions important à retenir :

Une fois choisis ces deux numéros de versions pour l'installation de Python, si ces versions sont précisées pour un module, alors il faudra choisir exactement ces deux mêmes versions.

WinPython


more...

2013-11-21 Fusionner deux tableaux

L'exercice est le suivant : on récupère deux tableaux depuis le site http://www.data.gouv.fr/. On récupère les deux fichiers suivants :

Ils contiennent des effectifs de la fonction publique ventilés par ministères :

Ministère    Libellé    Catégorie d'emploi    Emploi    ETPPLF
1    Affaires étrangères    1101    Titulaires et CDI en administration centrale    3 059
1    Affaires étrangères    1102    Titulaires et CDI dans le réseau    2 895
1    Affaires étrangères    1103    CDD et volontaires internationaux    2 877
1    Affaires étrangères    1104    Militaires    712
1    Affaires étrangères    1105    Agents de droit local    4 962
...

On cherche à mesurer l'évolution des effectifs entre ces deux années même si la liste des ministères et des catégories évolue.


more...

2013-09-14 Quelques astuces avec pandas python

Ce n'est pas toujours évident d'apprendre à manipuler un nouveau module. On commence toujours par des trucs simples qu'on peine toujours à faire même après quelques requêtes sur un moteur de recherche. Bref, voici quelques raccourcis (on suppose que df est un DataFrame). Je recommande un rapide coup d'oeil à 10 Minutes to Pandas (et celle-ci aussi : Essential Basic Functionality).

Parcourir tous les éléments (version lente) :

self.header = ['index'] + [ _ for _ in df.columns ]
self.values = []
for i in range(len(df) :
    row = [ df.index[i] ] + [ df.ix[i,j] for j in range(len(self.header)) ]
    self.values.append(row)

Parcourir tous les éléments (version plus rapide) :

self.header = ['index'] + [ _ for _ in df.columns ]
self.values = []
for i,row in enumerate(df.values) :
    row = [ df.index[i] ] + [ x for x in row ]
    self.values.append(row)

Créer un DataFrame à partir d'une matrice (liste de listes) :

df = pandas.DataFrame(liste_de_listes, columns = list_nom_colonnes)


more...

Xavier Dupré