2017-10-02 5 views
1

Je suis coincé avec un processus où j'ai pandas dataframe qui a une de ses colonnes comme mon index désiré.ajouter zéro/Nan lignes à l'index discontinu dans pandas python

Mais cet index a un type Str + num.

Index_H 

['N0000', 'N0002', 'N0003', 'N0007', 'N0011', 'N0017', 'N0018', 'N0020', 'N0021', 'N0023', 'N0026', 'N0027', 'N0028', 'N0030', 'N0033', 'N0034', 'N0045', 'N0050', 'N0052', 'N0055', 'N0056', 'N0057', 'N0059'] 

Chacune de ces valeurs d'index a une ligne de valeurs associées couvrant à 344 colonnes (1 * 344) pour chaque N **** Je veux convertir à un index continu et ajouter des zéros/Nan les lignes où l'index est manquant.

+0

construire une chaîne de serise et ré-indexation – Wen

Répondre

2
df2 = pd.DataFrame({'foo': ['one','one','two','two','two'], 
         'bar': [ 'B', 'C', 'A', 'B', 'C'], 
         'baz': [ 2, 3, 4, 5, 6]},index=['N0001','N0004','N0005','N0006','N0009']) 
idx='N'+pd.Series(list(range(1,11))).astype(str).str.zfill(4) 
df2.reindex(idx) 

Out[365]: 
     bar baz foo 
N0001 B 2.0 one 
N0002 NaN NaN NaN 
N0003 NaN NaN NaN 
N0004 C 3.0 one 
N0005 A 4.0 two 
N0006 B 5.0 two 
N0007 NaN NaN NaN 
N0008 NaN NaN NaN 
N0009 C 6.0 two 
N0010 NaN NaN NaN 
+0

Nous vous remercions de votre réponse rapide. Mais à la fois pour votre solution, et celle ci-dessus, j'ai la même erreur. "raise ValueError (" ne peut pas réindexer à partir d'un axe dupliqué ") ValueError: impossible de réindexer à partir d'un axe dupliqué" –

+0

@KamalanathanG l'erreur, redonner à vous signifie que l'index est dupliqué, ce qui n'est pas autorisé, essayez d'utiliser la valeur unique l'index – Wen

+0

J'ai fusionné l'index dupliqué avec des lignes et plus tard votre solution fonctionne comme un charme Merci! –

1

En utilisant reindex

In [350]: df 
Out[350]: 
     a 
N0000 1 
N0002 2 
N0003 3 
N0007 4 

In [358]: df.reindex(['N%04d' % x for x in range(int(df.index[-1][1:])+1)]) 
Out[358]: 
     a 
N0000 1.0 
N0001 NaN 
N0002 2.0 
N0003 3.0 
N0004 NaN 
N0005 NaN 
N0006 NaN 
N0007 4.0 
+0

Merci pour votre réponse rapide. Mais à la fois pour votre solution, et celle ci-dessous, j'ai la même erreur. "raise ValueError (" impossible de réindexer à partir d'un axe dupliqué ") ValueError: impossible de réindexer à partir d'un axe dupliqué" –