2017-08-18 3 views
2

Cette question a été posée tellement de fois, et il a semblé fonctionner pour d'autres, cependant, j'obtiens des valeurs NaN quand je copie une colonne d'un DataFrame différent (df1 et df2 sont même longueur).Copier une colonne d'un DataFrame à un autre donne des valeurs NaN?

df1

 date  hour  var1 
0 2017-05-01 00:00:00 456585 
1 2017-05-01 01:00:00 899875 
2 2017-05-01 02:00:00 569566 
3 2017-05-01 03:00:00 458756 
4 2017-05-01 04:00:00 231458 
5 2017-05-01 05:00:00 986545 

df2

 MyVar1  MyVar2 
0 6169.719338 3688.045368 
1 5861.148007 3152.238704 
2 5797.053347 2700.469871 
3 5779.102340 2730.471948 
4 6708.219647 3181.298291 
5 8550.380343 3793.580394 

J'ai besoin comme ça dans mon df2

 MyVar1 MyVar2  date  time 
0 6169.719338 3688.045368 2017-05-01 00:00:00 
1 5861.148007 3152.238704 2017-05-01 01:00:00 
2 5797.053347 2700.469871 2017-05-01 02:00:00 
3 5779.102340 2730.471948 2017-05-01 03:00:00 
4 6708.219647 3181.298291 2017-05-01 04:00:00 
5 8550.380343 3793.580394 2017-05-01 05:00:00 

J'ai essayé ce qui suit,

df2['date'] = df1['date'] 
df2['hour'] = df1['hour'] 

type(df1) 
>> pandas.core.frame.DataFrame 

type(df2) 
>> pandas.core.frame.DataFrame 

Je reçois ce qui suit,

 MyVar1 MyVar2  date  time 
0 6169.719338 3688.045368 NaN  NaN 
1 5861.148007 3152.238704 NaN  NaN 
2 5797.053347 2700.469871 NaN  NaN 

Pourquoi est-ce qui se passe? Il y a un autre post qui parle de merge, mais j'ai juste besoin de le copier. Toute aide serait appréciée.

Répondre

2

Je crois que votre index de données est différent. Vous pouvez réinitialiser l'index en premier.

df1 = df1.reset_index(drop=True) 
df2 = df2.reset_index(drop=True) 

Maintenant, vous pouvez assigner:

df2['date'] = df1['date'] 
df2['hour'] = df1['hour'] 

Vous pouvez également utiliser pd.concat:

df = pd.concat([df2, df1[['date', 'hour']]], axis=1) 
print(df) 


     MyVar1  MyVar2  date  hour 
0 6169.719338 3688.045368 2017-05-01 00:00:00 
1 5861.148007 3152.238704 2017-05-01 01:00:00 
2 5797.053347 2700.469871 2017-05-01 02:00:00 
3 5779.102340 2730.471948 2017-05-01 03:00:00 
4 6708.219647 3181.298291 2017-05-01 04:00:00 
5 8550.380343 3793.580394 2017-05-01 05:00:00 
+0

@ i.n.n.m Cela peut poser un problème avec votre index. Essayez d'ajouter 'ignore_index = True'? Sinon, réinitialisez d'abord les deux indices, puis concaténez-les. –

+1

@ i.n.n.m try 'df2 ['date'] = df1 ['date']. Values' – Wen

+0

@COLDSPEED' reset_index' travaillé. –

3

Essayez cela?

df2['date'] = df1['date'].values 
df2['hour'] = df1['hour'].values 
+0

merci, ça a marché aussi! –

+0

Belle solution n'impliquant pas de réinitialisation! –

+2

@ cᴏʟᴅsᴘᴇᴇᴅ Vous aussi bonne solution ~ +1 – Wen