Comment ajouter une ligne d'en-tête à un DataFrame Pandas

166

Je lis un fichier csv dans pandas. Ce fichier csv se compose de quatre colonnes et de quelques lignes, mais n'a pas de ligne d'en-tête, que je souhaite ajouter. J'ai essayé ce qui suit:

Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame([Cov], columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')

Mais lorsque j'applique le code, j'obtiens l'erreur suivante:

ValueError: Shape of passed values is (1, 1), indices imply (4, 1)

Que signifie exactement l'erreur? Et quel serait un moyen propre en python d'ajouter une ligne d'en-tête à mon fichier csv / pandas df?

séquence_hard
la source
Voici une interprétation différente de votre question: Ajoutez un autre en-tête à un Dataframe existant pour créer un MultiIndex.
cs95

Réponses:

257

Vous pouvez utiliser namesdirectement dans leread_csv

names: en forme de tableau, par défaut Aucun Liste des noms de colonnes à utiliser. Si le fichier ne contient pas de ligne d'en-tête, alors vous devez explicitement passer header = None

Cov = pd.read_csv("path/to/file.txt", 
                  sep='\t', 
                  names=["Sequence", "Start", "End", "Coverage"])
Leb
la source
9
Tu vas rire. En fait, j'ai essayé cela, mais je ne savais pas que vous devez mettre des crochets autour des noms. Ce qui est logiquement rétrospectif. Je vous remercie!
sequence_hard
Pas de soucis, nous avons tous commis ces erreurs stupides. J'en suis aussi coupable.
Leb
@Leb, j'ai eu exactement le même problème et j'ai essayé votre solution. J'ai récupéré les en-têtes du tableau mais la première ligne a également été remplacée par les mêmes noms d'en-tête. Qu'est-ce que je fais maintenant?
007mrviper
il ajoute plus de colonnes à mes données, toutes avec des NaNattributs. C'était parce que mon séparateur est un espace vide.
SalahAdDin le
128

Vous pouvez également lire votre csv avec header=None, puis l'ajouter avec df.columns:

Cov = pd.read_csv("path/to/file.txt", sep='\t', header=None)
Cov.columns = ["Sequence", "Start", "End", "Coverage"]
Anton Protopopov
la source
15
col_Names=["Sequence", "Start", "End", "Coverage"]
my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)

après avoir fait cela, vérifiez-le avec [bien évidemment je sais, vous le savez. Mais reste...

my_CSV_File.head()

J'espère que ça aide ...

Bhardwaj Joshi
la source
Veuillez formater votre code avec le {}bouton. L'indentation est importante.
M. T
7

Pour corriger votre code, vous pouvez simplement changer [Cov]en Cov.values, le premier paramètre de pd.DataFramedeviendra un numpytableau multidimensionnel:

Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame(Cov.values, columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')

Mais la solution la plus intelligente reste l'utilisation pd.read_excelavec header=Noneet names=columns_list.

romulomadu
la source
Lorsque nous donnons column_list, pouvons-nous ajouter des valeurs par défaut pour les colonnes sélectionnées?
Chintan Gotecha le