是否有 python 函数可以根据 NaN 百分比获取列?
Is there a python function to get columns according to NaN percentage?
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.choice([np.nan,1], p=(0.8,0.2),size=(10,10)))
print (df)
0 1 2 3 4 5 6 7 8 9
0 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
3 1.0 1.0 NaN NaN NaN 1.0 NaN NaN 1.0 NaN
4 NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN
5 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN
6 1.0 NaN NaN NaN 1.0 NaN NaN NaN 1.0 NaN
7 NaN NaN NaN NaN 1.0 NaN 1.0 NaN NaN NaN
8 1.0 NaN NaN NaN NaN NaN 1.0 NaN NaN NaN
9 NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN
对于上面的 dataframe
,获得低于给定 NAN 百分比 (阈值)的 column names
的最简单代码是什么?
要获取低于 30% NaN 的列名称,我可以使用以下代码来完成此操作
col_list = df.dropna(thresh=df.shape[0]*0.3,
how='all', axis=1).columns.to_list()
col_list
[0, 4, 6, 8]
获取此类列名的最简单代码是什么?
如果您只想通过索引来完成,类似的方法应该可行
df.columns[df.isna().sum() / df.shape[0] < 0.3] # columns names
df.loc[:, df.isna().sum() / df.shape[0] < 0.3] # columns with data
因此,计算 nums 的小数,获取它是否低于阈值,并使用 loc 提取相应的列。
你可以做到
df.isna().mean().loc[lambda x : x<0.3]
Out[59]:
1 0.1
6 0.2
7 0.0
8 0.2
dtype: float64
# df.notna().mean().loc[lambda x : x<0.3].index
选择:
col_list = df.columns[df.count() / df.shape[0] >= 0.3].tolist()
print(col_list)
# Output:
[0, 4, 6, 8]
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.choice([np.nan,1], p=(0.8,0.2),size=(10,10)))
print (df)
0 1 2 3 4 5 6 7 8 9
0 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN
3 1.0 1.0 NaN NaN NaN 1.0 NaN NaN 1.0 NaN
4 NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN
5 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN
6 1.0 NaN NaN NaN 1.0 NaN NaN NaN 1.0 NaN
7 NaN NaN NaN NaN 1.0 NaN 1.0 NaN NaN NaN
8 1.0 NaN NaN NaN NaN NaN 1.0 NaN NaN NaN
9 NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN
对于上面的 dataframe
,获得低于给定 NAN 百分比 (阈值)的 column names
的最简单代码是什么?
要获取低于 30% NaN 的列名称,我可以使用以下代码来完成此操作
col_list = df.dropna(thresh=df.shape[0]*0.3,
how='all', axis=1).columns.to_list()
col_list
[0, 4, 6, 8]
获取此类列名的最简单代码是什么?
如果您只想通过索引来完成,类似的方法应该可行
df.columns[df.isna().sum() / df.shape[0] < 0.3] # columns names
df.loc[:, df.isna().sum() / df.shape[0] < 0.3] # columns with data
因此,计算 nums 的小数,获取它是否低于阈值,并使用 loc 提取相应的列。
你可以做到
df.isna().mean().loc[lambda x : x<0.3]
Out[59]:
1 0.1
6 0.2
7 0.0
8 0.2
dtype: float64
# df.notna().mean().loc[lambda x : x<0.3].index
选择:
col_list = df.columns[df.count() / df.shape[0] >= 0.3].tolist()
print(col_list)
# Output:
[0, 4, 6, 8]