空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

海绵宝宝撒
浏览 1825回答 2
2回答

江户川乱折腾

因为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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python