感谢@everfigt
还是不懂colums怎么丢的。。。
t2的情况好理解,就是按true/false过滤,也就是说把空dataframe当成内部条件是没什么意义的吧?
但是我尝试直接用空dataframe也是有结果的:
In [11]: t2[pd.DataFrame()]
Out[11]:
a b
0 NaN NaN
1 NaN NaN
另外,下面两种空dataframe过滤为什么会得到不同的结果呢:
In [20]: t1.apply(myfunc, axis=1)
Series([], dtype: float64)
Out[20]:
Empty DataFrame
Columns: [a, b]
Index: []
In [21]: t1[t1.apply(myfunc, axis=1)] # 为啥这里的colums丢了
Series([], dtype: float64)
In [13]: t1[pd.DataFrame()] # 为啥直接失败了
~/programs/venv36/lib/python3.6/site-packages/pandas/core/frame.py in getitem(self, key)
2133 return self._getitem_array(key)
2134 elif isinstance(key, DataFrame):
-> 2135 return self._getitem_frame(key)
2136 elif is_mi_columns:
2137 return self._getitem_multilevel(key)
~/programs/venv36/lib/python3.6/site-packages/pandas/core/frame.py in _getitem_frame(self, key)
2217 if key.values.size and not is_bool_dtype(key.values):
2218 raise ValueError(‘Must pass DataFrame with boolean values only’)
-> 2219 return self.where(key)
2220
2221 def query(self, expr, inplace=False, **kwargs):
~/programs/venv36/lib/python3.6/site-packages/pandas/core/generic.py in where(self, cond, other, inplace, axis, level, errors, try_cast, raise_on_error)
6128 other = com._apply_if_callable(other, self)
6129 return self._where(cond, other, inplace, axis, level,
-> 6130 errors=errors, try_cast=try_cast)
6131
6132 @Appender(_shared_docs[‘where’] % dict(_shared_doc_kwargs, cond=”False”,
~/programs/venv36/lib/python3.6/site-packages/pandas/core/generic.py in _where(self, cond, other, inplace, axis, level, errors, try_cast)
5889 for dt in cond.dtypes:
5890 if not is_bool_dtype(dt):
-> 5891 raise ValueError(msg.format(dtype=dt))
5892
5893 cond = cond.astype(bool, copy=False)
ValueError: Boolean array expected for the condition, not float64
Original: https://blog.csdn.net/weixin_42492000/article/details/113561721
Author: 松松饼
Title: dataframe筛选列名_空dataframe过滤行之后列名丢失了
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/753043/
转载文章受原作者版权保护。转载请注明原作者出处!