Pandas(Python) : Fill empty cells with with previous row value?

后端 未结 2 1104
日久生厌
日久生厌 2020-12-28 21:36

I want to fill empty cells with with previous row value if they start with number. For example, I have

    Text    Text    
    30      Text    Text    
            


        
相关标签:
2条回答
  • 2020-12-28 21:47

    First, replace your empty cells with NaNs:

    df[df[0]==""] = np.NaN
    

    Now, Use ffill():

    df.fillna(method='ffill')
    #       0
    #0  Text
    #1    30
    #2    30
    #3    30
    #4    31
    #5  Text
    #6    31
    #7    31
    #8    31
    #9    32
    
    0 讨论(0)
  • 2020-12-28 21:49

    I think you can first get NaN instead whitespaces:

    df.Text = df.Text[df.Text.str.strip() != '']
    
    print (df)
        Text Text.1      
    0     30   Text  Text
    1    NaN   Text  Text
    2    NaN   Text  Text
    3     31   Text  Text
    4   Text   Text   NaN
    5     31   Text  Text
    6    NaN   Text  Text
    7    NaN   Text  Text
    8     32   Text  Text
    9   Text   Text   NaN
    10   NaN   Text  Text
    11   NaN   Text  Text
    12   NaN   Text  Text
    13   NaN   Text  Text
    

    Then use ffill (same as fillna with parameter ffill), get to_numeric for where for replace NaN if not numeric forward filling NaN, last replace NaN by empty string by fillna:

    orig = df.Text.copy()
    df.Text = df.Text.ffill()
    mask1 = pd.to_numeric(df.Text, errors='coerce')
    df.Text = df.Text.where(mask1, orig).fillna('')
    print (df)
        Text Text.1      
    0     30   Text  Text
    1     30   Text  Text
    2     30   Text  Text
    3     31   Text  Text
    4   Text   Text   NaN
    5     31   Text  Text
    6     31   Text  Text
    7     31   Text  Text
    8     32   Text  Text
    9   Text   Text   NaN
    10         Text  Text
    11         Text  Text
    12         Text  Text
    13         Text  Text
    
    0 讨论(0)
提交回复
热议问题