一个按条件过滤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)
添加回答
举报
0/150
提交
取消