亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

熊貓:如何刪除熊貓數據幀中所有列的前導缺失值?

熊貓:如何刪除熊貓數據幀中所有列的前導缺失值?

揚帆大魚 2022-09-20 17:48:37
使用大熊貓數據幀的形式:     A     B     CID                1   10   NaN   NaN2   20   NaN   NaN3   28  10.0   NaN4   32  18.0  10.05   34  22.0  16.06   34  24.0  20.07   34  26.0  21.08   34  26.0  22.0如何刪除不同數量的初始缺失值?最初,我想向前填充“新”列的最后一個值,所以我最終會得到這個:    A     B     C0  10  10.0  10.01  20  18.0  16.02  28  22.0  20.03  32  24.0  21.04  34  26.0  22.05  34  26.0  22.06  34  26.0  22.07  34  26.0  22.0但我想在剩余的行上也有nans也是很自然的:    A     B     C0  10  10.0  10.01  20  18.0  16.02  28  22.0  20.03  32  24.0  21.04  34  26.0  22.05  34  26.0   NaN6  34   NaN   NaN7  34   NaN   NaN以下是問題的直觀表示形式:以前:后:我提出了一個笨重的方法,使用for循環,我使用刪除前導nan,計算我刪除的值的數量(N),附加最后一個可用數字N次,并逐列構建新的數據幀。但事實證明,對于較大的數據幀來說,這是非常慢的。我覺得這已經是萬能熊貓庫的內置功能,但到目前為止我還沒有找到任何東西。有沒有人建議用一種不那么繁瑣的方式來做到這一點?df.dropna()使用示例數據集完成代碼:import pandas as pdimport numpy as np# sample dataframedf = pd.DataFrame({'ID':[1,2,3,4,5,6,7,8],                    'A': [10,20,28,32,34,34,34,34],                   'B': [np.nan, np.nan, 10,18,22,24,26,26],                    'C': [np.nan, np.nan, np.nan,10,16,20,21,22]})df=df.set_index('ID')# container for dataframe# to be built using a for loopdf_new=pd.DataFrame()for col in df.columns:    # drop missing values column by column    ser = df[col]    original_length = len(ser)    ser_new = ser.dropna()    # if leading values are removed for N rows.    # append last value N times for the last rows    if len(ser_new) <= original_length:        N = original_length - len(ser_new)        ser_append = [ser.iloc[-1]]*N        #ser_append = [np.nan]*N        ser_new = ser_new.append(pd.Series(ser_append), ignore_index=True)    df_new[col]=ser_newdf_new
查看完整描述

2 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

這是一個純粹的熊貓解決方案。使用應用根據前導 NaN 的數量向上移動值,并使用 ffill,


df.apply(lambda x: x.shift(-x.isna().sum())).ffill()



    A      B       C

1   10  10.0    10.0

2   20  18.0    16.0

3   28  22.0    20.0

4   32  24.0    21.0

5   34  26.0    22.0

6   34  26.0    22.0

7   34  26.0    22.0

8   34  26.0    22.0


查看完整回答
反對 回復 2022-09-20
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

我們可以利用每個序列,并按缺失值的數量移動每個序列shift


d = df.isna().sum(axis=0).to_dict() # calculate the number of missing rows per column 


for k,v in d.items():

    df[k] = df[k].shift(-v).ffill()

--


print(df)


   ID   A     B     C

0   1  10  10.0  10.0

1   2  20  18.0  16.0

2   3  28  22.0  20.0

3   4  32  24.0  21.0

4   5  34  26.0  22.0

5   6  34  26.0  22.0

6   7  34  26.0  22.0

7   8  34  26.0  22.0


查看完整回答
反對 回復 2022-09-20
  • 2 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號