2017-07-05 3 views
1

Comment puis-je fusionner deux trames de données en place dans des pandas?Fusion externe de deux trames de données en place dans les pandas

Par exemple, supposons que nous avons ces deux trames de données:

import pandas as pd 

s1 = pd.DataFrame({ 
    'time':[1234567000,1234567005,1234567009], 
    'X1':[96.32,96.01,96.05] 
},columns=['time','X1']) # to keep columns order 

s2 = pd.DataFrame({ 
    'time':[1234567001,1234567005], 
    'X2':[23.88,23.96] 
},columns=['time','X2']) # to keep columns order 

Ils pourraient être fusionnés avec pandas.DataFrame.merge (s3 = pd.merge(s1,s2,how='outer')) ou avec pandas.merge (s3=s1.merge(s2,how='outer')), mais il est pas en place. Au lieu de cela, j'aimerais que la trame de données fusionnée remplace s1 en mémoire.

+0

Etes-vous sûr d'éviter les copies? Il y a un 'copy' kwarg que [" * If False, ne pas copier les données inutilement * "] (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html), mais jouer avec et 'np.share_memory' suggère que dans votre exemple le résultat est toujours copié. Ce qui n'est pas si surprenant, étant donné que la base de données résultante est assez différente des originaux. Mais je ne suis pas très expérimenté avec les pandas, donc mes impressions pourraient être loin. –

+0

Que voulez-vous dire "il n'est pas en place"? Qu'essayez-vous d'accomplir? –

+0

@AndrewL J'aimerais que la trame de données fusionnée remplace s1 en mémoire. –

Répondre

2

Comme il n'y a pas inplace paramètre dans pandas.merge je pense que le plus que vous pouvez faire est:

s1 = pd.merge(s1,s2,how='outer') 

autre que cela, je ne pense pas qu'il y ait beaucoup à faire.
J'espère que cela a été utile en quelque sorte.

+0

Merci, je vais l'accepter dans quelques jours si aucune autre réponse –

+0

Bien sûr, je J'espère qu'il y a quelque chose de mieux que ça .. ce serait tellement décevant s'il n'y a pas:/@FranckDernoncourt –