2
votes

Comment changer le nom d'une colonne lorsque le nom actuel est NaT dans Pandas

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 


3 commentaires

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


5 Réponses :


1
votes

vous pouvez simplement réaffecter directement le nom des colonnes:

df1.columns = ['Name1','Name2']


0 commentaires

0
votes

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


1 commentaires

cela fonctionne, et si j'avais 50 colonnes de plus que devrais-je utiliser à la place de df.columns [-1]



1
votes

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


0 commentaires

0
votes

Modifiez votre premier code comme suit:

df1.rename(columns = {'NaT':'Name1', 'Nat': 'Name2'})


0 commentaires

1
votes

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)


0 commentaires