J'ai un bloc de données df1 avec deux noms de colonnes comme NaT
df1.rename(columns = {0:'Name1', 1: 'Name2'}) #(doesn't work) df1.columns.values[0] = 'Name1' #(doesn't work) df1.columns.values[1] = 'Name2' #(doesn't work)
Comment puis-je changer le nom des colonnes NaT en "Name1" et "Name2"
Index Name1 Name2 2019-01-01 00:00:00 1 A B 1 2 C D 2
J'ai essayé les affirmations suivantes:
Index NaT Nat 2019-01-01 00:00:00 1 A B 1 2 C D 2
5 Réponses :
vous pouvez simplement réaffecter directement le nom des colonnes:
df1.columns = ['Name1','Name2']
Vous pouvez utiliser set_axis
comme ceci:
Name1 Name2 C D E F G H I J 0 0 1 2 3 4 5 6 7 8 9 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 25 26 27 28 29 3 30 31 32 33 34 35 36 37 38 39 4 40 41 42 43 44 45 46 47 48 49 5 50 51 52 53 54 55 56 57 58 59 6 60 61 62 63 64 65 66 67 68 69 7 70 71 72 73 74 75 76 77 78 79 8 80 81 82 83 84 85 86 87 88 89 9 90 91 92 93 94 95 96 97 98 99
Sortie:
df = pd.DataFrame(np.arange(100).reshape(10,-1), columns=[*'ABCDEFGHIJ']) df = df.set_axis(['Name1']+['Name2']+df.columns[-8:].tolist(), axis=1, inplace=False)
Modifier pour répondre au commentaire, utilisez le découpage de l'en-tête de colonne comme ceci:
Name1 Name2 2019-01-03 00:00:00 1 A B 1 2 C D 2
Sortie:
df_out = df.set_axis(['Name1','Name2',df.columns[-1]], axis=1, inplace=False) df_out
cela fonctionne, et si j'avais 50 colonnes de plus que devrais-je utiliser à la place de df.columns [-1]
Vous pouvez attribuer une nouvelle liste à partir des noms de colonnes - d'abord depuis l'original, ensuite par liste et les colonnes suivantes de 4. à la dernière:
df.columns = ['Name1', 'Name2'] + df.columns[2:].tolist() print (df) Name1 Name2 2019-01-01 00:00:00 Index 1 A B 1 2 C D 2
Ou si la première colonne est index puis réexécution de la liste avec les colonnes de la 3. à la dernière:
df.columns = df.columns[:1].tolist() + ['Name1', 'Name2'] + df.columns[3:].tolist() print (df) Index Name1 Name2 2019-01-01 00:00:00 0 1 A B 1 1 2 C D 2
Modifiez votre premier code comme suit:
df1.rename(columns = {'NaT':'Name1', 'Nat': 'Name2'})
J'avais un problème où
df.rename (columns = {"NaT": "new_column_name"}, inplace = True)
ne fonctionnerait pas car l'en-tête de colonne NaT était en fait une valeur (pd.NaT) et non une chaîne.
Dans ce cas, le code suivant a fonctionné.
df.rename (colonnes = {pd.NaT: "new_column_name"}, inplace = True)
De quel type sont les colonnes? S'agit-il réellement d'horodatages ou de chaînes?
df.columns = df.columns.astype (str); df.rename (colonnes = {'NaT': 'Nom1', 'Nat': 'Nom2'})
les noms de colonne sont horodatés Je ne veux pas changer le type de contenu juste les noms