Comment puis-je lire des données au format CSV dans un tableau d'enregistrements dans NumPy?
Je me demande si il y a un moyen direct pour importer le contenu d'un fichier CSV dans un tableau d'enregistrements de la même manière que R read.table()
, read.delim()
, et read.csv()
de la famille des importations de données à la R du bloc de données?
Ou est la meilleure façon d'utiliser csv.reader() puis appliquer quelque chose comme numpy.core.records.fromrecords()
?
- Double Possible de Comment lire et écrire des fichiers CSV avec Python?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser Numpy est
genfromtxt()
méthode pour le faire, par la définition de ladelimiter
kwarg d'une virgule.Plus d'informations sur la fonction peut être trouvé à ses la documentation.
nan
valeurs, pourquoi? Aussi avec loadtxt, je suisUnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 155: ordinal not in range(128)
. J'ai trémas comme ä et ö dans les données d'entrée.encoding="utf8"
argument. Python est l'un des rares logiciels modernes pièces qui provoque souvent des problèmes d'encodage de texte, qui se sentent comme des choses du passé.Je recommanderais le
read_csv
fonction de lapandas
bibliothèque:Cela donne une pandas DataFrame - permettant de nombreuses fonctions de manipulation de données qui ne sont pas directement disponibles avec numpy enregistrement des tableaux.
Je vous recommande également les
genfromtxt
. Cependant, la question demande une tableau d'enregistrements, par opposition à un tableau normal, ledtype=None
paramètre doit être ajouté à lagenfromtxt
appel:Donné un fichier d'entrée,
myfile.csv
:donne un tableau:
et
donne un tableau d'enregistrements:
Cela a l'avantage de fichier avec plusieurs types de données, y compris des chaînes de caractères) peut être facilement importé.
Vous pouvez également essayer
recfromcsv()
qui peut deviner les types de données et de retourner correctement formaté tableau d'enregistrements.numpy.recfromcsv(fname, delimiter=',', filling_values=numpy.nan, case_sensitive=True, deletechars='', replace_space=' ')
Les principaux arguments sont les trois derniers.J'ai chronométré le
contre
sur les 4,6 millions de lignes avec environ 70 colonnes et a constaté que la NumPy chemin a 2 min 16 sec et le csv-liste de compréhension de la méthode a pris 13 secondes.
Je recommanderais le csv-liste de compréhension de la méthode car il est le plus susceptible s'appuie sur les bibliothèques pré-compilées et non l'interprète autant que NumPy. Je soupçonne les pandas méthode aurait similaire interprète les frais généraux.
Que j'ai essayé les deux façons à l'aide de NumPy et les Pandas, à l'aide de pandas a beaucoup d'avantages:
C'est mon code de test:
test_numpy_csv.py
test_pandas.py
Fichier de données:
Avec NumPy et les pandas au versions:
Vous pouvez utiliser ce code pour envoyer le fichier CSV des données dans un tableau:
J'ai essayé ceci:
À l'aide de
numpy.loadtxt
Un très simple méthode. Mais il exige de tous les éléments de type float (int et ainsi de suite)
C'est le moyen le plus facile:
import csv
with open('testfile.csv', newline='') as csvfile:
data = list(csv.reader(csvfile))
Maintenant chaque entrée de données est un record, représenté comme un tableau. Donc, vous avez un tableau 2D. Il m'a sauvé beaucoup de temps.
Je voudrais suggérer à l'aide de tableaux (
pip3 install tables
). Vous pouvez enregistrer votre.csv
fichier à.h5
à l'aide de pandas (pip3 install pandas
),Vous pouvez ensuite facilement et avec moins de temps, même pour une quantité énorme de données, charger vos données dans un tableau NumPy.