如何删除第一行有 Nan 的列

How to remove columns have Nan at the first row

我有几个 datas.The 第一行有一些元素是 Nan,因此,我将删除它们。然后,以下数据框应删除相应的列。以下是我的数据框示例。请告知我如何删除第一行有 Nan 的列。

        Var1 Var2 Var3 Var4 NaN Var5 NaN Var6 NaN
Values  10   20   30   40   50  60   70  80   90
Values  10   20   30   40   x   60   y   80   z
Values  10   20   30   40   a   60   b   80   c

我有一个想法,那就是我会把 Columns have NaN (in the first row) 放到最后一列,然后,我删除它们。但是,我想采用灵活的方式,因为我不确定第一行有多少 'Nan' 元素。我用了很多方法,但都不成功。 X 是 DataFrame 的名称: 来自 tkinter.filedialog 导入 askopenfilename

dirname=askopenfilename( initialdir='/.log', title= 'please select a directory')
j=pd.read_csv(dirname, header=None, sep=r";")
if None in x.ix[0]:
    y = x.drop([col for col in x if col in x.ix[0]], axis=1, inplace=True)

预期输出:

        Var1 Var2 Var3 Var4 Var5 Var6 
Values  10   20   30   40   60   80   
Values  10   20   30   40   60   80   
Values  10   20   30   40   60   80   

假设你有 df:

        Var1 Var2 Var3 Var4 NaN Var5 NaN Var6 NaN
Values  10   20   30   40   50  60   70  80   90
Values  10   20   30   40   x   60   y   80   z
Values  10   20   30   40   a   60   b   80   c

然后您可以删除名称为 NaN:

的列
df = df.drop([col for col in df.columns if col.strip()=='NaN'], axis=1)
df

它将是:

        Var1    Var2    Var3    Var4    Var5    Var6
Values  10      20      30      40      60      80
Values  10      20      30      40      60      80
Values  10      20      30      40      60      80

更新:

根据您的更新,您的 df 是:

    0     1     2     3     4   5     6   7    8
0   Var1  Var2  Var3  Var4  NaN Var5  NaN Var6 NaN
1   10    20    30    40    50  60    70  80   90
2   10    20    30    40    x   60    y   80    z
3   10    20    30    40    a   60    b   80    c

那么你可以将第0行设置为列名,并根据列名不是nan进行过滤:

import numpy as np
df.columns = df.iloc[0]
df = df[[col for col in df.columns if col is not np.nan]]
df

df 将是:

    Var1  Var2  Var3  Var4  Var5  Var6
0   Var1  Var2  Var3  Var4  Var5  Var6
1   10    20    30    40    60    80
2   10    20    30    40    60    80
3   10    20    30    40    60    80