3
votes

Structure de trame de données correspondant aux pandas

J'ai deux blocs de données comme ceux ci-dessous:

df2
    var1   var2  var3
0     1     5     NaN
1     2     7     NaN
2     3     7     NaN

et

d2 = {'var1': [4, 1, 3], 'var2': [5, 7, 7]}
df2 = pd.DataFrame(data=d2)
df2
    var1   var2
0     1     5
1     2     7
2     3     7

Je veux que df2 ait les mêmes colonnes et colonne ordre comme le df d'origine

pour que les résultats ressemblent à:

d = {'var1': [1, 2, 3, 4], 'var2': [5, 6, 7, 8], 'var3': [9, 10, 11, 12]}
df = pd.DataFrame(data=d)
df
    var1   var2  var3
0     1     5      9
1     2     6      10
2     3     7      11
3     4     8      12

Je sais que je peux attribuer manuellement une nouvelle colonne dans cet exemple appelé 'var3 'et définissez ses valeurs sur NaN, mais je recherche une solution générale où cela doit être fait sur de nombreux blocs de données avec de nombreuses colonnes.


0 commentaires

3 Réponses :


2
votes

Essayez d'utiliser reindex:

   var1  var2  var3
0     4     5   NaN
1     1     7   NaN
2     3     7   NaN

Output:

df2.reindex(df.columns, axis=1)


0 commentaires

0
votes
 for n in (set(df.columns) - set(df2.columns)):
    df2[str(n)] = np.NaN

0 commentaires

2
votes

Utilisation de align

df2,_=df2.align(df,axis=1)
df2
Out[190]: 
   var1  var2  var3
0     4     5   NaN
1     1     7   NaN
2     3     7   NaN


0 commentaires