2017-05-02 7 views
2

Warum bekomme ich NaN in 'ACTION' Spalte? Es scheint mir seltsam, dass ich dieses Ergebnis bekomme. Ich habe versucht, ignore_index = True zu verwenden, und es hat einen Häufigkeitsfehler.Pandas Concat neue Spalte

     C  H  L  O  OI  V WAP ACTION 
datetime                 
2017-03-14 00:52:00 8.25 8.25 8.19 8.21 302.0 1769.0 8.22  NaN 
2017-03-13 23:54:00 8.09 8.10 8.09 8.10 6.0 65.0 8.10  NaN 
2017-03-14 01:03:00 8.29 8.32 8.28 8.29 175.0 1084.0 8.30  NaN 
2017-03-14 00:03:00 8.15 8.15 8.14 8.15 13.0 50.0 8.15  NaN 
2017-03-13 23:57:00 8.13 8.13 8.12 8.12 3.0  6.0 8.12  NaN 

ich zu bekommen -

     C  H  L  O  OI  V WAP ACTION 
datetime                 
2017-03-14 00:52:00 8.25 8.25 8.19 8.21 302.0 1769.0 8.22  100 
2017-03-13 23:54:00 8.09 8.10 8.09 8.10 6.0 65.0 8.10  200 
2017-03-14 01:03:00 8.29 8.32 8.28 8.29 175.0 1084.0 8.30  300 
2017-03-14 00:03:00 8.15 8.15 8.14 8.15 13.0 50.0 8.15  400 
2017-03-13 23:57:00 8.13 8.13 8.12 8.12 3.0  6.0 8.12  500 

buy_stp = pd.Series([100,200,300,400,500],name= 'ACTION') 
print(buy_stp) 
df10 = pd.concat([df_concat_results, 
        buy_stp], 
        axis=1, 
        join_axes=[df_concat_results.index]) 

print(df10) 

Antwort

1

Sie müssen gleiche Indizes - Series mit DataFrame für die Ausrichtung sonst NaN s erhalten:

buy_stp.index = df.index 
df['ACTION'] = buy_stp 
print (df) 
         C  H  L  O  OI  V WAP ACTION 
datetime                 
2017-03-14 00:52:00 8.25 8.25 8.19 8.21 302.0 1769.0 8.22  100 
2017-03-13 23:54:00 8.09 8.10 8.09 8.10 6.0 65.0 8.10  200 
2017-03-14 01:03:00 8.29 8.32 8.28 8.29 175.0 1084.0 8.30  300 
2017-03-14 00:03:00 8.15 8.15 8.14 8.15 13.0 50.0 8.15  400 
2017-03-13 23:57:00 8.13 8.13 8.12 8.12 3.0  6.0 8.12  500 

Oder:

buy_stp = pd.Series([100,200,300,400,500],name= 'ACTION', index=df.index) 
print(buy_stp) 
datetime 
2017-03-14 00:52:00 100 
2017-03-13 23:54:00 200 
2017-03-14 01:03:00 300 
2017-03-14 00:03:00 400 
2017-03-13 23:57:00 500 
Name: ACTION, dtype: int64 

df['ACTION'] = buy_stp 
print (df) 
         C  H  L  O  OI  V WAP ACTION 
datetime                 
2017-03-14 00:52:00 8.25 8.25 8.19 8.21 302.0 1769.0 8.22  100 
2017-03-13 23:54:00 8.09 8.10 8.09 8.10 6.0 65.0 8.10  200 
2017-03-14 01:03:00 8.29 8.32 8.28 8.29 175.0 1084.0 8.30  300 
2017-03-14 00:03:00 8.15 8.15 8.14 8.15 13.0 50.0 8.15  400 
2017-03-13 23:57:00 8.13 8.13 8.12 8.12 3.0  6.0 8.12  500 

funktioniert auch, wenn durch values oder list-numpy array konvertieren, nur ist notwendig gleiche Länge df und buy_stp:

df['ACTION'] = buy_stp.values 
print (df) 
         C  H  L  O  OI  V WAP ACTION 
datetime                 
2017-03-14 00:52:00 8.25 8.25 8.19 8.21 302.0 1769.0 8.22  100 
2017-03-13 23:54:00 8.09 8.10 8.09 8.10 6.0 65.0 8.10  200 
2017-03-14 01:03:00 8.29 8.32 8.28 8.29 175.0 1084.0 8.30  300 
2017-03-14 00:03:00 8.15 8.15 8.14 8.15 13.0 50.0 8.15  400 
2017-03-13 23:57:00 8.13 8.13 8.12 8.12 3.0  6.0 8.12  500 

df['ACTION'] = buy_stp.tolist() 
print (df) 
         C  H  L  O  OI  V WAP ACTION 
datetime                 
2017-03-14 00:52:00 8.25 8.25 8.19 8.21 302.0 1769.0 8.22  100 
2017-03-13 23:54:00 8.09 8.10 8.09 8.10 6.0 65.0 8.10  200 
2017-03-14 01:03:00 8.29 8.32 8.28 8.29 175.0 1084.0 8.30  300 
2017-03-14 00:03:00 8.15 8.15 8.14 8.15 13.0 50.0 8.15  400 
2017-03-13 23:57:00 8.13 8.13 8.12 8.12 3.0  6.0 8.12  500 
0

Wenn ich Sie richtig verstehe, wollen Sie nur eine Spalte zu einem Datenrahmen hinzuzufügen. Wenn ja, ist dies der einfachste Weg, dies zu tun.

df['Action'] = buy_stp 
+0

Das ist, was ich tun wollte. Es scheint, dass meine Indizes die gleichen sein müssen, auf die Jezrael unten hingewiesen hat. –

Verwandte Themen