我有一段这样的代码:
import numpy as np
df111=[]
def getNoNaN(row_in,dflist):
if np.sum(~pd.isna(row_in[3:])) > 1:
dflist.append(row_in)
dftest.apply(axis=1,func=getNoNaN,dflist=df111)
df111[0]
并且,在df 111的第一行中得到了一个意外的结果。
df111[0]
Name d4a0dad668a4249f8ddb8cfd336e3397
ID f703f7b7e0173bc4269bfff2d8882439
Level 8
No.3 NaN
No.4 NaN
No.5 NaN
No.6 NaN
No.7 NaN
No.8 NaN
No.9 NaN
No.10 NaN
No.11 NaN
No.12 NaN
No.13 NaN
No.14 0.55456
Name: 3615, dtype: object
这看起来很不寻常,因为np.sum(~pd.isna(row_in[3:]))等于1,我不太清楚为什么它会出现在df 111列表中。
值得注意的是,我现在有多种解决方案,可以正常实现类似的功能(并且非常清楚上述代码的不恰当之处)。
但是这个现象仍然困扰着我,也许我错过了Pandas文档中的一些重要提示?希望能得到您的帮助。
可用的测试数据可在此处下载:https://drive.google.com/file/d/1AuylSty8-8jmgZQE9_nY2cSYeEs1aw5v/view?usp=share_link
1条答案
按热度按时间0sgqnhkj1#
你不需要使用
apply
,你可以使用向量化代码:输出:
关于您的错误:为了解决这个问题,你必须在每次在列表中追加一行(系列)时制作一个副本:
输出: