J'ai un problème avec la lecture de CSV (ou fichier txt) sur pandas Parce que la fonction loadtxt de numpy prend trop de temps, j'ai décidé d'utiliser à la place pandas read_csv).
Je veux faire un tableau numpy à partir d'un fichier txt avec quatre colonnes séparées par un espace, et a un très grand nombre de lignes (comme, 256 ^ 3. Dans cet exemple, c'est 64 ^ 3).
Le problème est que je ne sais pas pourquoi mais il semble que read_csv de pandas saute toujours la première ligne (première ligne) du fichier csv (txt), ce qui donne une donnée de moins.
voici le code.
from __future__ import division
import numpy as np
import pandas as pd
ngridx = 4
ngridy = 4
ngridz = 4
size = ngridx*ngridy*ngridz
f = np.zeros((size,4))
a = np.arange(size)
f[:, 0] = np.floor_divide(a, ngridy*ngridz)
f[:, 1] = np.fmod(np.floor_divide(a, ngridz), ngridy)
f[:, 2] = np.fmod(a, ngridz)
f[:, 3] = np.random.Rand(size)
print f[0]
np.savetxt('Testarray.txt',f,fmt='%6.16f')
g = pd.read_csv('Testarray.txt',delimiter=' ').values
print g[0]
print len(g[:,3])
f [0] et g [0] qui sont affichés dans la sortie doivent correspondre, mais ce n'est pas le cas, indiquant que pandas saute la première ligne du Testarray.txt
. De plus, la longueur du fichier chargé g
est inférieure à la longueur du tableau f
.
J'ai besoin d'aide.
Merci d'avance.
Par défaut, pd.read_csv
les usages header=0
(lorsque le paramètre names
n'est pas non plus spécifié), ce qui signifie que la première ligne (c'est-à-dire 0e indexée) est interprétée comme un nom de colonne.
Si vos données n'ont pas d'en-tête, utilisez
pd.read_csv(..., header=None)
Par exemple,
import io
import sys
import pandas as pd
if sys.version_info.major == 3:
# Python3
StringIO = io.StringIO
else:
# Python2
StringIO = io.BytesIO
text = '''\
1 2 3
4 5 6
'''
print(pd.read_csv(StringIO(text), sep=' '))
Sans header
, la première ligne, 1 2 3
, définit les noms des colonnes:
1 2 3
0 4 5 6
Avec header=None
, la première ligne est traitée comme une donnée:
print(pd.read_csv(StringIO(text), sep=' ', header=None))
impressions
0 1 2
0 1 2 3
1 4 5 6
Si votre fichier n'a pas de ligne d'en-tête, vous devez le dire Pandas donc en utilisant header = None dans votre appel à pd.read_csv ().