使用for循环操作python函数输出
在stats.scipy中,我对数据帧中的每个数字列应用了变异系数测试,我希望筛选输出,以便它只显示值大于0且不丢失的列。这是我的密码:使用for循环操作python函数输出,python,pandas,for-loop,scipy,Python,Pandas,For Loop,Scipy,在stats.scipy中,我对数据帧中的每个数字列应用了变异系数测试,我希望筛选输出,以便它只显示值大于0且不丢失的列。这是我的密码: x = df.select_dtypes(exclude=['object']).apply(stats.variation)*100 for i in x: if i != 'NaN' and i != 0: print i 它仍然返回NaN和0的值。我怎样才能解决这个问题?另外,如何格式化它,使循环返回变量的名称和数值 编辑:
x = df.select_dtypes(exclude=['object']).apply(stats.variation)*100
for i in x:
if i != 'NaN' and i != 0:
print i
它仍然返回NaN和0的值。我怎样才能解决这个问题?另外,如何格式化它,使循环返回变量的名称和数值
编辑:
这是我存储在x中的函数的输出:
var_1 NaN
var_2 3.809518
var_5 7.031835
var_10 20.190090
var_20 21.217053
var_30 20.806000
我想格式化输出,使var_1不会显示出来,我想你需要检查NaN
,然后检查0
并返回所有True
。最后一次使用时:
样本:
x = pd.DataFrame({'A':[1,0,0],
'B':[4,np.nan,6],
'C':[7,8,9]})
print (x)
A B C
0 1 4.0 7
1 0 NaN 8
2 0 6.0 9
print (x.notnull() & (x != 0))
A B C
0 True True True
1 False False True
2 False True True
print ((x.notnull() & (x != 0)).all())
A False
B False
C True
dtype: bool
mask = (x.notnull() & (x != 0)).all()
print (x.loc[:, mask])
C
0 7
1 8
2 9
编辑:
如果x
是系列
使用:
x = pd.Series([np.nan, 1, 0, 0, 5, np.nan])
print (x)
0 NaN
1 1.0
2 0.0
3 0.0
4 5.0
5 NaN
dtype: float64
print (x[x.notnull() & (x != 0)])
1 1.0
4 5.0
dtype: float64
编辑1:
x = pd.Series([np.nan, 3.809518, 7.031835000000001, 20.190089999999998, 21.217053, 20.806],
index=['var_1', 'var_2', 'var_5', 'var_10', 'var_20', 'var_30'])
print (x)
var_1 NaN
var_2 3.809518
var_5 7.031835
var_10 20.190090
var_20 21.217053
var_30 20.806000
dtype: float64
print (x.notnull() & (x != 0))
var_1 False
var_2 True
var_5 True
var_10 True
var_20 True
var_30 True
dtype: bool
print (x[x.notnull() & (x != 0)])
var_2 3.809518
var_5 7.031835
var_10 20.190090
var_20 21.217053
var_30 20.806000
Name: 1, dtype: float64
在函数输出上尝试了您的代码,我收到了一条错误消息:索引器太多,
x.info()
?x.info()返回错误。类型(x)是pandas.core.series.series。我运行了该代码,然后在答案中使用了掩码代码,它只返回一个空的DataFrameMate。抱歉,我尝试了编辑代码,但也不起作用
x = pd.Series([np.nan, 3.809518, 7.031835000000001, 20.190089999999998, 21.217053, 20.806],
index=['var_1', 'var_2', 'var_5', 'var_10', 'var_20', 'var_30'])
print (x)
var_1 NaN
var_2 3.809518
var_5 7.031835
var_10 20.190090
var_20 21.217053
var_30 20.806000
dtype: float64
print (x.notnull() & (x != 0))
var_1 False
var_2 True
var_5 True
var_10 True
var_20 True
var_30 True
dtype: bool
print (x[x.notnull() & (x != 0)])
var_2 3.809518
var_5 7.031835
var_10 20.190090
var_20 21.217053
var_30 20.806000
Name: 1, dtype: float64