我有以下列表,其中包含用于应用我的条件的列名:
text_cols = df.select_dtypes(include=obj_types).columns.values.tolist()
然后,我使用以下列表 (text_cols) 来创建一个条件适用的新列表:
if(df[df[text_cols] > 10]):
cols_to_remove=df.columns.get_values()
因此,如您所见,我将列表作为 if 条件中的参数传递,然后检查数据帧中列表中的下一个列名的值是否优于 10,如果是这种情况,我获取当前列的值并将其添加到我的cols_to_remove
列表中。
唯一的问题是,它没有按预期工作,而是收到以下错误:
值错误:数据帧的真实值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
df[colname]
是pd.Series
,表达式df[df[colname] > 10]
将起作用。在这种情况下,此表达式返回一个 bollean 索引:
df[colname] > 10
Out:
0 True
1 False
2 False
3 True
您可以使用此系列作为pd.DataFrame
的索引:
df[df[column] > 10]
但是,例如,如果你有一个df,
In[8]: df = pd.DataFrame({'col1': [0,12,2], 'col2': [13, 11, 5]})
Out[8]:
col1 col2
0 0 13
1 12 11
2 2 5
如果你这样做
In [9]: df > 10
Out[9]:
col1 col2
0 False True
1 True True
2 False False
你会得到一个PD。数据帧,不能用作索引。因此,错误数据建议您根据任务使用all()
或any()
,例如,
In [11]: (df > 10).all(axis=1)
Out[11]:
0 False
1 True
2 False
dtype: bool
- 这是一维索引。因此,您可以通过以下方式对数据帧进行切片:
In [12]: df[(df > 10).all(axis=1)]
Out[12]:
col1 col2
1 12 11
In [13]: df[(df > 10).any(axis=1)]
Out[13]:
col1 col2
0 0 13
1 12 11
我想,它将解决您情况下的错误。只需使用正确的函数 - all
,any
或只选择一列。
编辑
all
是所有元素(全部设置为 True
)的逻辑and
,any
是所有元素的逻辑or
(至少 True
个元素