我尝试通过pandas数据帧运行for循环,并将逻辑表达式应用于数据帧的每个元素中的列。我的代码编译没有错误,但没有输出。
示例代码:
for i in df:
if df['value'].all() >= 0.0 and df['value'].all() < 0.05:
print df['value']
任何帮助将不胜感激!谢谢
答案 0 :(得分:1)
如果您想查看列中的所有元素是否满足该逻辑表达式,可以使用此方法:
np.logical_and(df['value'] >= 0.0, df['value'] < 0.05).all()
这将返回单个True
或False
。
顺便说一句,我看不到for
循环是如何被使用的。由于在当前格式中,每次迭代都会运行相同的代码。
答案 1 :(得分:0)
.all()
将返回True
或False
,因此根据您的支票顺序,您将过滤掉所有内容。我假设你真正想要的是(df['value'] >= 0.0).all() and (df['value'] < 0.05).all()
。
'value'
替换为i
。
In [11]: df = pd.DataFrame([np.arange(0, 0.04, 0.01), np.arange(0, 4, 1)]).T
In [12]: df
Out[12]:
0 1
0 0.00 0.0
1 0.01 1.0
2 0.02 2.0
3 0.03 3.0
In [13]: for c in df:
...: if (df[c] >= 0.0).all() and (df[c] < 0.05).all():
...: print df[c]
...:
0 0.00
1 0.01
2 0.02
3 0.03
Name: 0, dtype: float64
答案 2 :(得分:0)
这是您正在寻找的结果吗?
print(df.loc[(df['value'] >= 0.0) & (df['value'] < 0.05), 'value'])
仅针对值,请将其放入:
print(df.loc[(df['value'] >= 0.0) & (df['value'] < 0.05), 'value'].values)
或
print(list(df.loc[(df['value'] >= 0.0) & (df['value'] < 0.05), 'value']))
获取值列表