为了账号安全,请及时绑定邮箱和手机立即绑定

空dataframe过滤行之后列名丢失了

空dataframe过滤行之后列名丢失了

海绵宝宝撒 2019-02-18 10:40:36
一个按条件过滤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
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

因为t1,t2内部的筛选条件不一样.
t2内部条件其实是取第二行。

In [18]: t2.apply(myfunc, axis=1)
Out[18]: 
0    False
1     True
dtype: bool

In [19]: t2[t2.apply(myfunc, axis=1)]
Out[19]: 
   a  b
1  1  3

t1的内部条件则不同,没有True,False,是一个空的DataFrame

In [20]: t1.apply(myfunc, axis=1)
Out[20]: Series([], dtype: float64)

In [21]: t1[t1.apply(myfunc, axis=1)]
Series([], dtype: float64)
查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 1824 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信