Lecture d'un dataframe à partir d'un fichier :
- df = pandas.read_csv('myFile.csv') : par défaut, suppose qu'il y a un header (header = 0) et qu'il n'y a pas de noms de colonne (index_col = None).
- sep = '\t' ou delimiter = '\t' : indique que le séparateur est une tabulation plutôt qu'une virgule.
- df = pandas.read_csv('myFile.csv', sep = '\t', header = None) : lecture d'une table sans header.
- si tableau avec étiquettes de lignes et de colonnes : df = pandas.read_csv('myFile.csv', sep = '\t', index_col = 0) (index_col est en fait le numéro de colonne contenant l'index).
- si tableau avec étiquettes de colonnes seulement : df = pandas.read_csv('myFile.csv', sep = '\t').
- si tableau avec étiquettes de lignes seulement : df = pandas.read_csv('myFile.csv', sep = '\t', header = None, index_col = 0).
- si tableau sans étiquettes de lignes ni de colonnes : df = pandas.read_csv('myFile.csv', sep = '\t', header = None).
- df = pandas.read_csv(fileName, sep = '\t', converters = {'barcode': str} : convertit la colonne barcode avec la fonction str. Attention :
- si on se trompe dans le nom, le converter est ignoré et aucune erreur !
- si on met un converter de type str, le na_values n'est pas pris en compte !
- on peut imposer des noms aux colonnes :
- si pas de header (noms de colonnes) dans le fichier initial : df = pandas.read_csv('myFile.csv', sep = '\t', names = ['X1', 'X2', 'X3'])
- si il y a déjà un header (noms de colonnes) dans le fichier initial : df = pandas.read_csv('myFile.csv', sep = '\t', names = ['X1', 'X2', 'X3'], header = 0).
- df = pandas.read_csv('myFile.csv', sep = '\t', quoting = csv.QUOTE_NONE) : ne touche pas aux quotes, les laisse telles qu'elles sont (pareil avec to_csv)
- df = pandas.read_csv('myFile.csv', sep = '\t', na_values = ['-']) : on donne avec na_values la liste des valeurs qui doivent être assimilées à NaN (valeur non définie) en plus des valeurs déjà définies commme NA :
- par défaut, '', '#N/A', 'N/A', 'NA', <NA>, 'NULL', 'null', 'NaN', 'n/a', 'nan' sont tous interprêtés comme nan
- mettre na_filter = False en laissant le défaut pour na_values pour éviter que les cellules vides se transforment en NaN.
- df = pandas.read_csv('myFile.csv', sep = '\t', keep_default_na = False, na_values = ['']) : enlève les valeurs interprêtées par défaut comme NA et ne garde que celles indiquées.
- df = pandas.read_csv('myFile.csv', sep = '\t', dtype = str)
- Pour préciser les types de certaines colonnes, on peut faire : df = read_csv(myFile, sep = '\t', dtype = {'col1': str, 'col2': int, 'col4': numpy.float})
- on peut lire seulement le début d'un tableau : df = pandas.read_csv(..., nrows = 1000) (utile pour le debugging !)
- on peut sauter les n premières lignes : df = pandas.read_csv(myFile, skiprows = 10) : saute les 10 premières lignes.
- df = pandas.read_csv(myFile, sep = '\t', usecols = range(12)) : lit seulement les 12 premières colonnes.
- df = pandas.read_csv(fileName, sep = '\t', usecols = ['A', 'C', 'G'] : lit seulement certaines colonnes (on doit toutes les préciser par index, ou toutes par nom).
- df = pandas.read_csv('myFile.csv', sep = '\t', skiprows = [0, 1]) : lit le fichier en sautant les lignes 0 et 1 du fichier (donc ici, le header est sur la 3ème ligne, d'index 2). Très utile si ces lignes contiennent des intitulés qui perturbent alors complètement le typage de chaque colonne !
- skip_footer = 5 : saute les 5 dernières lignes du fichier.
- attention : si nom de colonne répété, le deuxième est modifié avec une extension .1, le troisième avec une extension .2, etc ...
- Pour lire les 10 premières lignes en ayant sauté les 5 premières après le header : pandas.read_csv('myFile.csv', sep = '\t', index_col = 0, skiprows = lambda x : x > 0 and x <= 5, nrows = 10) (skiprows doit renvoyer True ssi on doit sauter la ligne.
- pour un fichier avec un nombre variable d'espaces séparant les colonnes : df = pandas.read_csv(inputFile, delim_whitespace = True)
- df = pd.read_csv('sample.csv.gz', compression='gzip') : permet de lire un fichier compressé avec gzip.
Ecriture d'un dataframe dans un fichier :
- df.to_csv('myFile.csv', sep = '\t') : écrit le dataframe avec une tabulation comme séparateur (le défaut est une virgule).
- header = False : supprime le header des colonnes (défaut est de l'inclure).
- index = False : supprime le nom des lignes (défaut est de l'inclure).
- na_rep = '-' : imprime les valeurs NaN comme '-' (le défaut est la chaîne vide).
- pour écrire sur stdout : df.to_csv(sys.stdout, sep = '\t', index = False) ou alors print(df.to_csv(sep = '\t', index = False))
- pour mettre un titre à la colonne d'index : df.to_csv(..., index = True, index_label = 'firstColumn')
- df.to_csv('myfile.csv', sep = '\t', mode = 'a') : pour faire un append.
- df.to_csv('myfile.csv', sep = ' ', index_label = 'myIndexName') : pour donner un nom à l'index juste au moment de la sauvegarde.
df.to_csv(None, sep = '\t', index = False) : renvoie une string qui est celle qui aurait été mise dans le filehandle si il avait été fourni.
Ecriture de dataframes dans différents onglets d'un fichier xlsx (en utilisant comme backend openpyxl) :
with pandas.ExcelWriter('outputFile.xlsx', engine = 'openpyxl') as writer:
df1.to_excel(writer, sheet_name = 'sheet1', index = False)
df2.to_excel(writer, sheet_name = 'sheet2', index = False)