123 votes

Importer un fichier CSV comme un DataFrame pandas

Quelle est la méthode Python pour lire un fichier CSV dans un fichier de données ? pandas DataFrame (que je peux ensuite utiliser pour des opérations statistiques, qui peut avoir des colonnes de types différents, etc.)

Mon fichier CSV "value.txt" a le contenu suivant :

Date,"price","factor_1","factor_2"
2012-06-11,1600.20,1.255,1.548
2012-06-12,1610.02,1.258,1.554
2012-06-13,1618.07,1.249,1.552
2012-06-14,1624.40,1.253,1.556
2012-06-15,1626.15,1.258,1.552
2012-06-16,1626.15,1.263,1.558
2012-06-17,1626.15,1.264,1.572

Dans R, nous lirions ce fichier en utilisant :

price <- read.csv("value.txt")  

et cela renverrait un data.frame R :

> price <- read.csv("value.txt")
> price
     Date   price factor_1 factor_2
1  2012-06-11 1600.20    1.255    1.548
2  2012-06-12 1610.02    1.258    1.554
3  2012-06-13 1618.07    1.249    1.552
4  2012-06-14 1624.40    1.253    1.556
5  2012-06-15 1626.15    1.258    1.552
6  2012-06-16 1626.15    1.263    1.558
7  2012-06-17 1626.15    1.264    1.572

Existe-t-il un moyen pythonique d'obtenir la même fonctionnalité ?

192voto

root Points 14514

pandas à la rescousse :

import pandas as pd
print pd.read_csv('value.txt')

        Date    price  factor_1  factor_2
0  2012-06-11  1600.20     1.255     1.548
1  2012-06-12  1610.02     1.258     1.554
2  2012-06-13  1618.07     1.249     1.552
3  2012-06-14  1624.40     1.253     1.556
4  2012-06-15  1626.15     1.258     1.552
5  2012-06-16  1626.15     1.263     1.558
6  2012-06-17  1626.15     1.264     1.572

Cela renvoie les pandas DataFrame qui est similaire à R's .

18voto

coldspeed Points 111053

Pour lire un fichier CSV sous la forme d'un DataFrame pandas, vous devez utiliser les éléments suivants pd.read_csv .

Mais l'histoire ne s'arrête pas là ; les données existent dans de nombreux formats différents et sont stockées de différentes manières, de sorte que vous devrez souvent passer des paramètres supplémentaires à la fonction read_csv pour s'assurer que vos données sont lues correctement.

Voici un tableau listant les scénarios courants rencontrés avec les fichiers CSV ainsi que l'argument approprié que vous devrez utiliser. Vous aurez généralement besoin de tous les arguments ou d'une combinaison des arguments ci-dessous pour lire les fichiers CSV. votre données.

  Scenario                                                  Argument                     Example                                               

  Read CSV with different separator¹                        sep/delimiter                read_csv(..., sep=';')                                
  Read CSV with tab/whitespace separator                    delim_whitespace             read_csv(..., delim_whitespace=True)                  
  Fix UnicodeDecodeError while reading²                     encoding                     read_csv(..., encoding='latin-1')                     
  Read CSV without headers³                                 header and names             read_csv(..., header=False, names=['x', 'y', 'z'])    
  Specify which column to set as the index                 index_col                    read_csv(..., index_col=[0])                          
  Read subset of columns                                    usecols                      read_csv(..., usecols=['x', 'y'])                     
  Numeric data is in European format (eg., 1.234,56)        thousands and decimal        read_csv(..., thousands='.', decimal=',')             

Notes de bas de page

  1. Par défaut, read_csv utilise un moteur d'analyse syntaxique en C pour des raisons de performance. L'analyseur C ne peut traiter que les séparateurs à un seul caractère. Si votre CSV a un séparateur à plusieurs caractères, vous devrez modifier votre code pour utiliser le site 'python' moteur. Vous pouvez également passer des expressions régulières :

    df = pd.read_csv(..., sep=r'\s*\|\s*', engine='python')
  2. UnicodeDecodeError se produit lorsque les données ont été stockées dans un format d'encodage mais lues dans un format différent et incompatible. Les schémas d'encodage les plus courants d'encodage les plus courants sont 'utf-8' y 'latin-1' vos données sont susceptibles de dans l'une de ces catégories.

  3. header=False spécifie que la première ligne du CSV est une ligne de données plutôt qu'une ligne d'en-tête, et la balise names=[...] vous permet de spécifier une liste de noms de colonnes à affecter au DataFrame lors de sa créé.

  4. "Unnamed : 0" se produit lorsqu'un DataFrame dont l'index n'est pas nommé est enregistré dans le CSV et relu ensuite. Au lieu de devoir résoudre le problème lors de la lecture, vous pouvez également résoudre le problème lors de l'écriture en utilisant la commande

    df.to_csv(..., index=False)

Il existe d'autres arguments que je n'ai pas mentionnés ici, mais ce sont ceux que vous rencontrerez le plus fréquemment.

11voto

sidi Points 949

Voici une alternative à la bibliothèque pandas en utilisant la bibliothèque intégrée de Python module csv .

import csv
from pprint import pprint
with open('foo.csv', 'rb') as f:
    reader = csv.reader(f)
    headers = reader.next()
    column = {h:[] for h in headers}
    for row in reader:
        for h, v in zip(headers, row):
            column[h].append(v)
    pprint(column)    # Pretty printer

imprimera

{'Date': ['2012-06-11',
          '2012-06-12',
          '2012-06-13',
          '2012-06-14',
          '2012-06-15',
          '2012-06-16',
          '2012-06-17'],
 'factor_1': ['1.255', '1.258', '1.249', '1.253', '1.258', '1.263', '1.264'],
 'factor_2': ['1.548', '1.554', '1.552', '1.556', '1.552', '1.558', '1.572'],
 'price': ['1600.20',
           '1610.02',
           '1618.07',
           '1624.40',
           '1626.15',
           '1626.15',
           '1626.15']}

7voto

Rishabh Points 31
import pandas as pd
df = pd.read_csv('/PathToFile.txt', sep = ',')

Ceci importera votre fichier .txt ou .csv dans un DataFrame.

6voto

Dulangi_Kanchana Points 777

Essayez ceci

import pandas as pd
data=pd.read_csv('C:/Users/Downloads/winequality-red.csv')

Remplacez l'emplacement cible du fichier par l'endroit où se trouve votre ensemble de données, en vous référant à cette url. https://medium.com/@kanchanardj/jargon-in-python-utilisé-dans-les-données-sciences-à-laymans-langue-part-one-12ddfd31592f

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X