[英]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
您使用.loc
和argmax()
:
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.