Convertir ligne d'en-tête de colonne pour les Pandas DataFrame,
Les données que j'ai à travailler avec est un peu brouillon.. Il a des noms d'en-tête à l'intérieur de ses données. Comment puis-je choisir une ligne à partir d'un existant pandas dataframe et de le rendre (renommer) un en-tête de colonne?
Je veux faire quelque chose comme:
header = df[df['old_header_name1'] == 'new_header_name1']
df.columns = header
Vous devez vous connecter pour publier un commentaire.
Définir les étiquettes de colonne à l'égalité des valeurs dans la 2e rangée (emplacement de l'index 1):
Si l'index est unique étiquettes, vous pouvez déposer la 2ème ligne à l'aide de:
Si l'index n'est pas unique, vous pouvez utiliser:
À l'aide de
df.drop(df.index[1])
supprime tous lignes avec la même étiquette que la deuxième ligne. Parce que les index uniques peuvent conduire à des pierres d'achoppement (ou les éventuels bugs), comme cela, il est souvent préférable de prendre garde à ce que l'index est unique (même si les Pandas n'en a pas besoin)."foo"
. Un moyen de contourner ce problème est de choisir explicitement la première rangée, comme:df.columns = df.iloc[np.where(df[0] == 'foo')[0][0]]
.Cela fonctionne (pandas v'0.19.2'):
.drop(df.index[0])
Vous pouvez spécifier l'index de ligne dans le read_csv ou read_html constructeurs via le
header
paramètre qui représentenuméro de Ligne(s) à utiliser comme noms de colonne, et le début des données
. Ceci a l'avantage de automatiquement la suppression de toutes les lignes précédentes qui soi-disant sont de la camelote.Il serait plus facile de recréer le bloc de données.
Ce serait également en mesure d'interpréter les types de colonnes à partir de zéro.