如何删除第一行有 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
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