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?


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"])

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"]

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 ...


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.


Lorsque nous donnons column_list, pouvons-nous ajouter des valeurs par défaut pour les colonnes sélectionnées?
Chintan Gotecha le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.