我想编写一个程序,如果超过了特定数量的NA值,则会删除该列。这就是我所做的。
def check(x):
for column in df:
if df.column.isnull().sum() > 2:
df.drop(column,axis=1)
执行上面的代码没有错误,但是在进行df.apply(check)
时会出现大量错误。
P.S:我知道df.dropna(thresh,axis)
任何提示?为什么我的代码不起作用?
谢谢
答案 0 :(得分:4)
尽管jezrael的答案行之有效,但这不是您应该采取的方法。而是创建一个掩码:~df.isnull().sum().gt(2)
并与.loc[:,m]
一起应用以访问列。
完整示例:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A':list('abcdef'),
'B':[np.nan,np.nan,np.nan,5,5,np.nan],
'C':[np.nan,8,np.nan,np.nan,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,np.nan],
'F':list('aaabbb')
})
m = ~df.isnull().sum().gt(2)
df = df.loc[:,m]
print(df)
返回:
A D E F
0 a 1 5.0 a
1 b 3 3.0 a
2 c 5 6.0 a
3 d 7 9.0 b
4 e 1 2.0 b
5 f 0 NaN b
说明
假定在应用之前先打印列和蒙版。
print(df.columns.tolist())
print(m.tolist())
它将返回以下内容:
['A', 'B', 'C', 'D', 'E', 'F']
[True, False, False, True, True, True]
B和C列是不需要的(False)。涂上口罩后,它们会被去除。
答案 1 :(得分:2)
我认为最好是在参数thresh
中使用dropna
:
thresh:int,可选
需要许多非NA值。
因此,对于矢量化解决方案,请从DataFrame
的长度中减去:
N = 2
df = df.dropna(thresh=len(df)-N, axis=1)
print (df)
A D E F
0 a 1 5.0 a
1 b 3 3.0 a
2 c 5 6.0 a
3 d 7 9.0 b
4 e 1 2.0 b
5 f 0 NaN b
我建议将DataFrame
更改为df.column
,将DataFrame.pipe
用于输入df[column]
的输入功能,因为带有来自变量的动态列名的点表示法失败(它尝试选择列名称column
):
df = pd.DataFrame({'A':list('abcdef'),
'B':[np.nan,np.nan,np.nan,5,5,np.nan],
'C':[np.nan,8,np.nan,np.nan,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,np.nan],
'F':list('aaabbb')})
print (df)
A B C D E F
0 a NaN NaN 1 5.0 a
1 b NaN 8.0 3 3.0 a
2 c NaN NaN 5 6.0 a
3 d 5.0 NaN 7 9.0 b
4 e 5.0 2.0 1 2.0 b
5 f NaN 3.0 0 NaN b
def check(df):
for column in df:
if df[column].isnull().sum() > 2:
df.drop(column,axis=1, inplace=True)
return df
print (df.pipe(check))
A D E F
0 a 1 5.0 a
1 b 3 3.0 a
2 c 5 6.0 a
3 d 7 9.0 b
4 e 1 2.0 b
5 f 0 NaN b
答案 2 :(得分:2)
或者,您可以使用<?php
$fetchname = "SELECT `Names` FROM `users`";
$fetched = mysqli_query($con,$fetchname);
while($row = mysqli_fetch_array($fetched,MYSQLI_ASSOC)){ ?>
<select name="Names">
<option value=""><?php echo $row['names']; ?></option>
</select>
<?php } ?>
来计数非空值
count