2017-06-03 4 views
1

Ich habe eine Reihe von Daten, wo einige Datensätze eine Zeile 'null' enthält, die korrigiert werden müssen.Python: So ändern Sie Daten mit Null in Pandas

Es gibt die Regel, um die Daten in pandas Datenrahmen zu korrigieren.

  1. Wenn Volume null ist, wechseln Sie in 0.

  2. Open, High, Low, Close folgen dem Schließen des Vortages. Mittlere 2016-6-29 die hat null wird Schließen von 2016-6-28 folgen, die 0.6 ist

  3. Wenn die erste Zeile leer ist, wird es volume = 0 und Open, high, LowClose, folgen Sie den nächsten Tag öffnen Wert.

    >>df_a 
    Date,Stock,Open,High,Low,Close,Adj Close,Volume 
    2016-06-22,AWG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-23,AWG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-24,AWG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-27,AWG,0.600000,0.600000,0.600000,0.600000,0.600000,800 
    2016-06-28,AWG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-29,AWG,null,null,null,null,null,null 
    2016-06-30,AWG,null,null,null,null,null,null 
    2016-07-01,AWG,0.620000,0.650000,0.620000,0.650000,0.650000,40000 
    2016-07-04,AWG,null,null,null,null,null,null 
    2016-07-05,AWG,null,null,null,null,null,null 
    2016-07-07,AWG,0.625000,0.650000,0.565000,0.650000,0.650000,3000 
    2016-07-08,AWG,0.650000,0.650000,0.650000,0.650000,0.650000,0 
    2016-07-11,AWG,0.650000,0.650000,0.605000,0.605000,0.605000,6000 
    2016-07-12,AWG,0.640000,0.640000,0.640000,0.640000,0.640000,3300 
    
    >>df_b 
    Date,Stock,Open,High,Low,Close,Adj Close,Volume 
    2016-06-10,WG,null,null,null,null,null,null 
    2016-06-13,WG,null,null,null,null,null,null 
    2016-06-14,WG,0.600000,0.600000,0.600000,0.600000,0.600000,1000 
    2016-06-15,WG,0.600000,0.600000,0.600000,0.600000,0.600000,2000 
    2016-06-16,WG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-17,WG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-20,WG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-21,WG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-22,WG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-23,WG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-24,WG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-27,WG,0.600000,0.600000,0.600000,0.600000,0.600000,800 
    2016-06-28,WG,0.600000,0.600000,0.600000,0.600000,0.600000,0 
    2016-06-29,WG,null,null,null,null,null,null 
    2016-06-30,WG,null,null,null,null,null,null 
    2016-07-01,WG,0.620000,0.650000,0.620000,0.650000,0.650000,40000 
    2016-07-04,WG,null,null,null,null,null,null 
    2016-07-05,WG,null,null,null,null,null,null 
    

Teil meiner Code:

volume = df_a['Volume'] == 'null' 
df_a.loc[volume,'Volume'] = 0 

Allerdings habe ich nicht in der Lage für Open, High, Low und Close fortzusetzen.

Antwort

0

Teil 1 (Bereits von Ihnen beantwortet)

Für eine vektorisierte Implementierung ist es besser, zu konvertieren null erster nan (kann eine bessere Lösung existiert sein)

TEIL 3 (ersetzt erste Reihe)

df.replace('null',np.NaN,inplace=True) 
    df.iloc[0].fillna(df.iloc[1].Open,inplace=True) 

Part 2 (Ersetzen Sie alle Nullwerte mit früheren schließen Werte):

df['Close'].bfill(inplace=True) 
df['Low'].fillna(df['Close'].shift(1),inplace=True) 
df['Open'].fillna(df['Close'].shift(1),inplace=True) 
df['High'].fillna(df['Close'].shift(1),inplace=True) 
print(df) 
+0

'df.l oc [0] 'return' TypeError: kann die Indexindizierung für nicht mit diesen Indexern [0] von ' –

+0

@hehappy durchführen Siehe, ob die Bearbeitung funktioniert –

+0

' df.iloc [0] .fillna (df.iloc [1] .Open, inplace = True) 'muss auch funktionieren –

Verwandte Themen