如何检查pandas系列是否为空?

时间:2014-07-09 11:24:23

标签: python pandas

如何检查pandas Series是否为空?

我试过这个:

How to check whether a pandas DataFrame is empty?

但似乎系列没有属性'isempty'。

6 个答案:

答案 0 :(得分:16)

我使用len功能。它比empty()快得多。 len(df.index)甚至更快。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10000, 4), columns=list('ABCD'))

def empty(df):
    return df.empty

def lenz(df):
    return len(df) == 0

def lenzi(df):
    return len(df.index) == 0

'''
%timeit empty(df)
%timeit lenz(df)
%timeit lenzi(df)

10000 loops, best of 3: 13.9 µs per loop
100000 loops, best of 3: 2.34 µs per loop
1000000 loops, best of 3: 695 ns per loop

len on index seems to be faster
'''

答案 1 :(得分:7)

根据Pandas documentation,你需要使用empty属性,而不是isempty

E.g。

In [12]: df.empty
Out[13]: False

答案 2 :(得分:7)

我用它来检查dataFrame中的特定列是否没有值或是否为空:

<?php
case 'upload-file':

$arr = [ 
    ":userid" => $_SESSION['loggedIn_PH'][0]['user_id'],
    ":filename" => $_FILES['upload-file']['name'],
    ":filelink" => $_FILES['upload-file']['tmp_name']
    ];

    $allowed =  array('xls','xlsx');
    $filename = $_FILES['upload-file']['name'];
    $ext = pathinfo($filename, PATHINFO_EXTENSION);

    if(!in_array($ext,$allowed) ) {
        $response_code = -1;
    }else{
        $response_code = -1;
        $folder = time();
        mkdir("path/".$folder);
        $file = "path".DIRECTORY_SEPARATOR.$folder.DIRECTORY_SEPARATOR.$_FILES['upload-file']['name'];
if(!file_exists($file)){
    $response_code = 1;
                move_uploaded_file($_FILES['upload-file']['tmp_name'], $file);

    $query = "INSERT INTO file_rec_tbl ( `file_name`, `file_datetime`,`file_link`, `user_id` )
                VALUES (:filename, '".date('Y-m-d H:i:s')."',:filelink,:userid)";

    $stmt = $con -> prepare( $query );
    $stmt -> execute( $arr );
}

}

exit(json_encode(array('r_code' => $response_code)));

?>

答案 3 :(得分:5)

如果NDFrame包含 NaN,则仍不会将其视为空。请参阅下面的示例。

<强>实施例

实际空DataFrame的示例。请注意索引为空:

>>> df_empty = pd.DataFrame({'A' : []})
>>> df_empty
Empty DataFrame
Columns: [A]
Index: []
>>> df_empty.empty
True

如果我们的DataFrame中只有 NaNs ,则不会将其视为空!我们需要删除 NaNs 以使DataFrame为空:

>>> df = pd.DataFrame({'A' : [np.nan]})
>>> df
    A
0 NaN
>>> df.empty
False
>>> df.dropna().empty
True

Source

答案 4 :(得分:1)

长答案:视情况而定

根据您对空的定义,您的答案可能会有很大差异,如其他各种答案所示。我试着总结一下,但首先有一些测试数据帧:

no_rows = pd.DataFrame([], columns=list('ABCD'))
no_cols = pd.DataFrame([], index=range(3))
only_na = pd.DataFrame(float('nan'), index=range(3), columns=list('ABCD'))

空 == 没有行

目前最流行的答案采用这种方法:一个有 0 行的 DataFrame 是空的:

def is_empty_no_rows(df):
    return len(df.index) == 0

空 == 无列

尚未提及,但同样有效的是转置定义:

def is_empty_no_cols(df):
    return len(df.columns) == 0

空 == 没有值

其实不,你关心的是价值观!如果您更喜欢可以同时处理空 index columns 的定义,以下定义会起作用:

def is_empty_no_vals(df):
    return df.values.size == 0

空 == 熊猫说的

为什么不接受熊猫自己对空的定义,对于这些测试用例,这会导致与无值定义相同的结果:

def is_empty_native(df):
    return df.empty

Pandas 自己的实现基本上只是检查是否 len(df.columns) == 0 or len(df.index) == 0,从不直接查看 values

空 == 不仅是 NaN 的

最后,您可能希望在考虑中忽略 NaN

def is_empty_nans(df):
    return df.dropna(how='all').empty

但实际上,这会打开下一个蠕虫罐头,因为您现在必须决定 how 以及要丢弃哪个 axis 的值?我在这里坚持更保守的 all。删除这些值后,您现在可以将上述所有定义应用于其结果。

比较

<头>
数据帧 is_empty_no_rows is_empty_no_cols is_empty_no_vals is_empty_native is_empty_nans
no_rows 真的 错误 真的 真的 真的
no_cols 错误 真的 真的 真的 真的
only_na 错误 错误 错误 错误 真的

答案 5 :(得分:0)

感谢@sparrow我用它来测试日期时间列:

    if len(df.select_dtypes(include='datetime').iloc[0].value_counts()) == 0:
        print('DF DATETIME COLUMNS: ', len(df_dt.iloc[0].value_counts()))

其他方法(a.any(),a.empty()...)均无效。 select返回具有非空索引但具有空列的返回值,所以我认为就是这样。 我认为它实际上会返回一个序列,因此iloc为零。