Je me demande s'il y a un moyen d'importer directement le contenu d'un fichier CSV dans un tableau enregistrement, beaucoup de la manière que de R read.table()
, read.delim()
et read.csv()
importe des données de la famille à la trame de données de R?
Ou est-ce la meilleure façon d'utiliser csv.reader () puis d'appliquer quelque chose comme numpy.core.records.fromrecords()
?
python
numpy
scipy
genfromtxt
hatmatrix
la source
la source
Réponses:
Pour ce faire, vous pouvez utiliser la
genfromtxt()
méthode de Numpy en définissant ledelimiter
kwarg sur une virgule.Plus d'informations sur la fonction peuvent être trouvées dans sa documentation respective .
la source
nan
valeurs, pourquoi? Aussi avec loadtxt, je reçoisUnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 155: ordinal not in range(128)
. J'ai des trémas tels que ä et ö dans les données d'entrée.encoding="utf8"
argument. Python est l'un des rares logiciels modernes à provoquer fréquemment des problèmes d'encodage de texte, qui ressemblent à des choses du passé.Je recommanderais la
read_csv
fonction de lapandas
bibliothèque:Cela donne un pandas DataFrame - permettant de nombreuses fonctions de manipulation de données utiles qui ne sont pas directement disponibles avec les tableaux d'enregistrement numpy .
Je recommanderais également
genfromtxt
. Cependant, puisque la question demande un tableau d'enregistrement , par opposition à un tableau normal, ledtype=None
paramètre doit être ajouté à l'genfromtxt
appel:Compte tenu d' un fichier d'entrée,
myfile.csv
:donne un tableau:
et
donne un tableau d'enregistrement:
Cela a l'avantage que le fichier avec plusieurs types de données (y compris les chaînes) peut être facilement importé .
la source
(1000, 1)
.np.genfromtxt
ne fait pas cela: par exemple(1000,)
.J'ai chronométré le
contre
sur 4,6 millions de lignes avec environ 70 colonnes et a constaté que le chemin NumPy a pris 2 min 16 secondes et la méthode de compréhension csv-list a pris 13 secondes.
Je recommanderais la méthode de compréhension csv-list car elle repose très probablement sur des bibliothèques précompilées et non pas sur l'interpréteur autant que NumPy. Je soupçonne que la méthode des pandas aurait des frais généraux d'interprète similaires.
la source
Vous pouvez également essayer
recfromcsv()
qui peut deviner les types de données et retourner un tableau d'enregistrement correctement formaté.la source
numpy.recfromcsv(fname, delimiter=',', filling_values=numpy.nan, case_sensitive=True, deletechars='', replace_space=' ')
Les arguments clés sont les trois derniers.Comme j'ai essayé les deux façons d'utiliser NumPy et Pandas, l'utilisation de pandas présente de nombreux avantages:
Voici mon code de test:
test_numpy_csv.py
test_pandas.py
Fichier de données:
Avec NumPy et pandas aux versions:
la source
Vous pouvez utiliser ce code pour envoyer des données de fichier CSV dans un tableau:
la source
En utilisant
numpy.loadtxt
Une méthode assez simple. Mais cela nécessite que tous les éléments soient flottants (int et ainsi de suite)
la source
C'est le moyen le plus simple:
import csv with open('testfile.csv', newline='') as csvfile: data = list(csv.reader(csvfile))
Maintenant, chaque entrée de données est un enregistrement, représenté sous forme de tableau. Vous avez donc un tableau 2D. Cela m'a fait gagner beaucoup de temps.
la source
J'ai essayé ceci:
la source
Je suggère d'utiliser des tableaux (
pip3 install tables
). Vous pouvez enregistrer votre.csv
fichier en.h5
utilisant pandas (pip3 install pandas
),Vous pouvez ensuite facilement et avec moins de temps, même pour une énorme quantité de données, charger vos données dans un tableau NumPy .
la source
Ce travail comme un charme ...
la source