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