答案 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)
答案 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
答案 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
:
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为零。