[英]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.