Je lis un pandas DataFrame
En utilisant pd.read_csv
. Je veux conserver la première ligne en tant que données, mais elle continue d'être convertie en noms de colonne.
header=False
Mais cela vient de le supprimer entièrement.(Remarque sur mes données d'entrée: j'ai une chaîne (st = '\n'.join(lst)
) que je convertis en un objet de type fichier (io.StringIO(st)
), puis je construis le csv
à partir de cela objet fichier.)
Tu veux header=None
le False
obtient le type promu en int
en 0
voir le docs accent sur le mien:
en-tête: int ou liste d'entiers, "infer" par défaut numéro (s) de ligne à utiliser comme noms de colonne, et début des données. Le comportement par défaut est comme défini sur 0 si aucun nom n'est transmis, sinon Aucun . Passez explicitement header = 0 pour pouvoir remplacer les noms existants. L'en-tête peut être une liste d'entiers qui spécifient des emplacements de ligne pour un multi-index sur les colonnes, par ex. [0,1,3]. Les lignes intermédiaires non spécifiées seront ignorées (par exemple, 2 dans cet exemple sont ignorées). Notez que ce paramètre ignore les lignes commentées et les lignes vides si skip_blank_lines = True, donc header = 0 désigne la première ligne de données plutôt que la première ligne du fichier.
Vous pouvez voir la différence de comportement, d'abord avec header=0
:
In [95]:
import io
import pandas as pd
t="""a,b,c
0,1,2
3,4,5"""
pd.read_csv(io.StringIO(t), header=0)
Out[95]:
a b c
0 0 1 2
1 3 4 5
Maintenant avec None
:
In [96]:
pd.read_csv(io.StringIO(t), header=None)
Out[96]:
0 1 2
0 a b c
1 0 1 2
2 3 4 5
Notez que dans la dernière version 0.19.1
, cela va maintenant générer un TypeError
:
In [98]:
pd.read_csv(io.StringIO(t), header=False)
TypeError: la transmission d'un booléen à l'en-tête n'est pas valide. Utilisez header = None pour aucun en-tête ou header = int ou une liste de caractères pour indiquer la ou les lignes constituant les noms de colonne
Je pense que vous avez besoin du paramètre header=None
à read_csv
:
Échantillon:
import pandas as pd
from pandas.compat import StringIO
temp=u"""a,b
2,1
1,1"""
df = pd.read_csv(StringIO(temp),header=None)
print (df)
0 1
0 a b
1 2 1
2 1 1