2017-06-03 3 views
1

データの一部に修正が必要な行'null'が含まれているデータセットがあります。Python:パンダでヌルのデータを変更する方法

pandasデータフレームのデータを修正するルールがあります。

  1. ボリュームがnull0への変更です。

  2. OpenHighLowCloseは前日の近くに従ってください。 nullは、最初の行がNULLの場合0.6

  3. ある2016-6-28閉じる続くた2016-6-29を意味する、それはvolume = 0OpenhighLowCloseは、次の日に開く値に従います。

    >>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 
    

私のコードの一部:

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

OpenHighLowCloseのために継続するしかし、私はできません。ベクトル化実装のために

答えて

0

(すでにあなたによって答え)パート1

は、その優れた最初のNaNにヌルに変換する(存在してより良い解決策かもしれない)

PART 3(最初の行を置き換える)

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

パート2(以前近い値を持つすべてのNULL値を置き換え):

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これらのインデクサ[0]がの場合、 –

+0

@behappy編集が正しく行われているかどうかを確認してください。 –

+0

'df.iloc [0] .fillna(df.iloc [1] .Open、inplace = True) 'はまた –

関連する問題