空dataframe过滤行之后列名丢失了
一个按条件过滤pandas中行的函数,
对于非空的dataframe可以正常工作,但是对于带列名
的空的dataframe,过滤后的空datafram缺丢失了列名
问题复现如下:
In [5]: t1 = pd.DataFrame(columns=['a','b'])
In [6]: t2=pd.DataFrame({'a':[-1,1],'b':[2,3]})
In [7]: t1
Out[7]:
Empty DataFrame
Columns: [a, b]
Index: []
In [8]: t2
Out[8]:
a b
0 -1 2
1 1 3
In [13]: def myfunc1(row):
...: if row.empty:
...: print(row)
...: return True
...: if int(row['a'])>0:
...: return True
...: else:
...: return False
...:
In [17]: t2[t2.apply(myfunc1, axis=1)]
Out[17]:
a b
1 1 3
In [18]: t1[t1.apply(myfunc1, axis=1)]
Series([], dtype: float64)
Out[18]:
Empty DataFrame
Columns: []
Index: []
t2结果过滤得到row['a']>0
的新dataframe,
但是t1经过过滤为什么丢失了columns呢?
因为后续处理要用到columns,所以我想知道
为什么丢失了columns
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为t1,t2内部的筛选条件不一样.
t2内部条件其实是取第二行。
t1的内部条件则不同,没有True,False,是一个空的DataFrame
感谢@everfigt
还是不懂colums怎么丢的。。。
t2的情况好理解,就是按true/false过滤,也就是说把空dataframe当成内部条件是没什么意义的吧?
但是我尝试直接用空dataframe也是有结果的:
另外,下面两种空dataframe过滤为什么会得到不同的结果呢: