查找具有 NaN 值的 DataFrame 列表的索引 - Pandas

Posted

技术标签:

【中文标题】查找具有 NaN 值的 DataFrame 列表的索引 - Pandas【英文标题】:Find Indexes of a List of DataFrame that have NaN Values - Pandas 【发布时间】:2017-12-31 19:16:45 【问题描述】:

我有一个数据框列表,其中一些数据框具有NaN 值。到目前为止,我可以使用这个link 识别单个数据框的NaN 值。

如何找到数据框具有NaN 值的列表的索引。

dffs 的示例列表,

[                   
 var1       var1  
14.171250  13.593813
13.578317  13.595329
10.301850  13.580139
9.930217   NaN
6.192517   13.561943
NaN        13.565149
6.197983   13.572509,  

  var1       var2    
2.456183  5.907528
5.052017  5.955731
5.960000  5.972480
8.039317  5.984608
7.559217  5.985348
6.933633  5.979438,

 var1       var1  
14.171250  23.593813
23.578317  23.595329
56.301850  23.580139
90.930217   22.365676
89.192517   33.561943
86.23654   53.565149
NaN        13.572509,  
...]

我需要在具有 NaN 值的列表 indexes 02 中获取结果。

到目前为止,我已经尝试过了,

df_with_nan = []
for df in dffs:
    df_with_nan.append(df.columns[df.isnull().any()])

根据上述for 循环,我得到列名var1var2。但是,当我循环遍历这些数据帧时,我需要这些数据帧的索引。任何帮助或建议都会很棒。

【问题讨论】:

当你说索引...你是指列表的索引? @cᴏʟᴅsᴘᴇᴇᴅ 是的,列表索引。因此,我可以识别该索引中的数据框。 你快到了...尝试if df.isnull().any().max(): 使用枚举,在 if 块中附加 df 索引。 Find Indexes of Non-NaN Values in Pandas DataFrame的可能重复 【参考方案1】:

您可以使用条件列表推导来枚举列表中的所有数据帧,并返回包含任何空值的那些的枚举索引值。

df_with_nan = [n for n, df in enumerate(dffs) if sum(df.isnull().any())]

【讨论】:

谢谢,列表理解方式有效,如果您能解释一下为什么在这里使用sum 使用sum 可以得到包含nan 值的列的总数。任何大于零的值都会计算为True。你也可以使用df.isnull().any().any()【参考方案2】:

你快到了...只需使用enumerate 循环索引,并使用df.isnull().values.any()(比df.isnull().any().max() 更快)进行测试:

df_with_nan = []
for i, df in enumerate(dffs):
    if df.isnull().values.any():
        df_with_nan.append(i)

当然,列表组合更短,但随心所欲。

【讨论】:

@COLDSPEED 你在这里有max 和@Alexander 的回答,sum 被使用,你为什么使用max?是max 索引吗? @i.n.n.m Sum 是一种使用或超过布尔值的奇特方式。 T 和 F 的最大值与 1 和 0 的最大值相同。我敢打赌这比 sum 快。在接受答案之前,您应该做一个基准测试;) @COLDSPEED 谢谢。是的,我正在尝试找出它们为何不同的细节:) any().any() 会更快,因为它会在第一个空值之后停止执行。 @Alexander 你觉得df.isnull().values.any()怎么样?

以上是关于查找具有 NaN 值的 DataFrame 列表的索引 - Pandas的主要内容,如果未能解决你的问题,请参考以下文章

如何将 pandas DataFrame 转换为省略 NaN 值的字典列表?

Pandas 中具有 NaN 值的子集列

连接具有重叠索引但从不重叠值的 Pandas DataFrame

如何将包含 float 和 nan 值的 Dataframe 转换为 datetime python?

数据框中现有值的 Python 条件 NaN 值替换

Python3 DataFrame缺失值的处理