簡體   English   中英

如何刪除第一列中具有 NaN 值的前 n 行?

[英]How to drop the first n rows that has a NaN value in the first column?

我的 dataframe 看起來像這樣: 在此處輸入圖像描述 我需要刪除前 4 行,因為它們在第一列中有 NaN 作為值。 由於我必須對稍微不同的數據框執行此操作,因此我不能僅按索引刪除它們。 為了實現這一點,我想逐行迭代 df,使用 numpy isnan function 檢查值是否為 NaN,然后刪除該行 - 遺憾的是它似乎不起作用。

first_col = df.columns[0]
for i, row in df.iterrows():
    if np.isnan(row[first_col]):
        df.drop(i, axis=0, inplace=True)
    else:
        break

雖然isnan不起作用。 所以我嘗試用空白字符串df.fillna("", inplace=True)替換 NaN 值並替換了 if 條件:

first_col = df.columns[0]
for i, row in df.iterrows():
    if row[first_col] == '':
        df.drop(i, inplace=True, axis=0)
    else:
        break

這行得通,但它非常丑陋。 有沒有更快/更整潔的方法來實現這一目標?

你可以試試這個:

df['num.ord.tariffa'] = df['num.ord.tariffa'].fillna('Remove')
newdf = df[df['num.ord.tariffa'] != 'Remove']

編輯:

final = pd.DataFrame()
n = 4
for index,row in df.iterrows():
   if index < n:
        if row['c1'] == np.nan:
           pass
        else:
           new = pd.DataFrame([[row['c1'],row['c2']]],columns=['c1','c2'])
           final = final.append(new)
   else:
        new = pd.DataFrame([[row['c1'],row['c2']]],columns=['c1','c2'])
        final = final.append(new)

您應該刪除具有 Nan 值的行並添加您感興趣的列的子集:

df = df.dropna(subset='num.ord.tariffa')

由於您發布它的方式,我無法復制您的完整數據集,但您可以這樣做:

假設一個df (類似於您的第一列):

  num.ord.tariffa
0             NaN
1             NaN
2             NaN
3             NaN
4               5
5               6
6               7

您使用.locargmax()

new_df = df.loc[df.notnull().all(axis=1).argmax():]

然后回來:

  num.ord.tariffa
4               5
5               6
6               7

這會刪除np.nan直到第一個non-nan ,這是您想要的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM