J'ai deux Le nouveau cadre peut contenir des données plus récentes pour les lignes déjà contenues dans le cadre ancien. Dans ce cas, les données de l'ancien cadre doivent être écrasées avec des données du nouveau cadre.
De plus, le nouveau cadre peut avoir plus de colonnes / rangées, que le premier.
Dans ce cas, l'ancien cadre doit être agrandi par les données dans le nouveau cadre. P> Pandas Docs état, que p> " Le et p> " A DataFrame peut être agrandi sur l'un des axes via dataframes code> (avec
denttimeindex code>) et souhaitez mettre à jour la première image (l'ancienne) avec des données de la deuxième image (le plus récent).
.Loc / .ix / [] code> Les opérations peuvent effectuer l'agrandissement lors de la réglage Une clé non existante pour cet axe " p>
.Loc code> " P> P> > Cependant, cela ne semble pas fonctionner et jette un
KeyError code>. Exemple: P>
A B C D
2015-07-09 12:00:00 1 1 1 NaN
2015-07-09 13:00:00 1 1 1 NaN
2015-07-09 14:00:00 2 2 2 2
2015-07-09 15:00:00 2 2 2 2
2015-07-09 16:00:00 2 2 2 2
2015-07-09 17:00:00 2 2 2 2
3 Réponses :
Vous pouvez utiliser la fonction combine code>.
d'accord merci. Je vais y regarder les prochains jours et accepterai votre réponse, si cela fonctionne. Cependant, je pense toujours que cela devrait être possible par simple indexation (au moins selon les documents).
@BMU Agrandissement Ne travaillez que lorsque vous ajoutez une ligne un temps. Dans votre cas, il y a plusieurs rangées.
J'ai mis à jour ma question. Il peut y avoir plus de lignes / colonnes à ajouter à la fois.
En plus de la réponse précédente, après la réindexage, vous pouvez utiliser
# your data # =========================================================== df1 = pd.DataFrame(np.ones(12).reshape(4,3), columns='A B C'.split(), index=pd.date_range('2015-07-09 12:00:00', periods=4, freq='H')) df2 = pd.DataFrame(np.ones(20).reshape(4,5)*2, columns='A B C D E'.split(), index=pd.date_range('2015-07-09 14:00:00', periods=4, freq='H')) # processing # ===================================================== # reindex to populate NaN result = df2.reindex(np.union1d(df1.index, df2.index)) # fill NaN from df1 result.fillna(df1, inplace=True) Out[3]: A B C D E 2015-07-09 12:00:00 1 1 1 NaN NaN 2015-07-09 13:00:00 1 1 1 NaN NaN 2015-07-09 14:00:00 2 2 2 2 2 2015-07-09 15:00:00 2 2 2 2 2 2015-07-09 16:00:00 2 2 2 2 2 2015-07-09 17:00:00 2 2 2 2 2
df2.combine_first (df1) code> ( Documentation )
semble servir votre besoin; Code PFB SNIPPET & SORTIE
pandas-version: 0.15.2
A B C D
Dt
2015-07-09 12:00:00 1 1 1 NaN
2015-07-09 13:00:00 1 1 1 NaN
2015-07-09 14:00:00 2 2 2 2
2015-07-09 15:00:00 2 2 2 2
2015-07-09 16:00:00 2 2 2 2
2015-07-09 17:00:00 2 2 2 2
BTW - la divergence que vous avez vue entre la documentation et la réelle KeyError renvoyée était parce que Till Pandas 0.21.0, vous pouvez indexer avec une liste comprenant B> Les étiquettes manquantes et existantes (c'est-à-dire qu'au moins une étiquette non manquante. ). Ce comportement est maintenant officiellement Amprété et vous ne pouvez pas inclure d'étiquettes manquantes dans une liste (une étiquette manquante Single i> est correcte et créera une nouvelle ligne / colonne).