如何检查Pandas行是否包含空集

时间:2017-12-11 22:50:40

标签: python pandas boolean

我想检查Pandas Dataframe行是否在特定列中包含空集,即

d = {'col1': [1, 2], 'col2': [3, {}]}
df2 = pd.DataFrame(data=d)


    col1    col2
0   1       3
1   2       {}

然后

df2['col_2_contains_empty_set'] = ? #  how to implement this

应该给出

    col1    col2    col_2_contains_empty_set
0   1       3       False
1   2       {}      True

这样做的正确方法是什么?无法做到

bool(df['col2']) 

df['col2'].bool()

因为Series具有不明确的布尔值,我想。

4 个答案:

答案 0 :(得分:3)

一种方式:

df2.apply(lambda x: any(x.values == {}), axis=1)

输出:

0    False
1     True
dtype: bool

OR

df2['c'] = np.max(df2.values == {}, 1).astype(bool)

输出:

   col1 col2      c
0     1    3  False
1     2   {}   True

答案 1 :(得分:2)

您可以将df2.values与空字典进行比较:

In [ ]: df2['col_2_contains_empty_set'] = (df2.values == {}).any(axis=1)
   ...: df2
Out[ ]: 
   col1 col2  col_2_contains_empty_set
0     1    3                     False
1     2   {}                      True

答案 2 :(得分:1)

您可以利用len({})= 0并应用lambda函数的事实:

[51/12427] CC obj/third_party/webrtc/common_audio/common_audio_c/sqrt_of_one_minus_x_squared.obj
[52/12427] CC obj/third_party/webrtc/common_audio/common_audio_c/complex_fft.obj
[53/12427] CXX obj/third_party/webrtc/call/call/call.obj
FAILED: obj/third_party/webrtc/call/call/call.obj
ninja -t msvc -e environment.x64 -- "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\HostX64\x64/cl.exe" /nologo /showIncludes  @obj/third_party/webrtc/call/call/call.obj.rsp /c ../../3rdparty/chromium/third_party/webrtc/call/call.cc /Foobj/third_party/webrtc/call/call/call.obj /Fd"obj/third_party/webrtc/call/call_cc.pdb"
C:\Qt\qt-everywhere-src-5.10.1\qtwebengine\src\3rdparty\chromium\third_party\webrtc/modules/video_coding/sequence_number_util.h(101): fatal error C1001: An internal error has occurred in the compiler.
(compiler file 'f:\dd\vctools\compiler\cxxfe\sl\p1\c\outdname.c', line 5310)
 To work around this problem, try simplifying or changing the program near the locations listed above.
Please choose the Technical Support command on the Visual C++
 Help menu, or open the Technical Support help file for more information
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\xutility(301): note: see reference to class template instantiation 'webrtc::DescendingSeqNumComp<uint16_t,0>' being compiled
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\xutility(301): note: see reference to variable template 'const bool is_empty_v<webrtc::DescendingSeqNumComp<unsigned short,0> >' being compiled
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\xtree(1078): note: see reference to class template instantiation 'std::_Tree_comp_alloc<_Traits>' being compiled
        with
        [
            _Traits=std::_Tmap_traits<uint16_t,webrtc::NackModule::NackInfo,webrtc::DescendingSeqNumComp<uint16_t,0>,std::allocator<std::pair<const uint16_t,webrtc::NackModule::NackInfo>>,false>
        ]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\map(82): note: see reference to class template instantiation 'std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>' being compiled
        with
        [
            _Kty=uint16_t,
            _Ty=webrtc::NackModule::NackInfo,
            _Pr=webrtc::DescendingSeqNumComp<uint16_t,0>,
            _Alloc=std::allocator<std::pair<const uint16_t,webrtc::NackModule::NackInfo>>
        ]
C:\Qt\qt-everywhere-src-5.10.1\qtwebengine\src\3rdparty\chromium\third_party\webrtc/modules/video_coding/nack_module.h(88): note: see reference to class template instantiation 'std::map<uint16_t,webrtc::NackModule::NackInfo,webrtc::DescendingSeqNumComp<uint16_t,0>,std::allocator<std::pair<const _Kty,_Ty>>>' being compiled
        with
        [
            _Kty=uint16_t,
            _Ty=webrtc::NackModule::NackInfo
        ]
[54/12427] CC obj/third_party/webrtc/common_audio/common_audio_c/refl_coef_to_lpc.obj
[55/12427] CC obj/third_party/webrtc/common_audio/common_audio_c/vector_scaling_operations.obj
[56/12427] CC obj/third_party/webrtc/common_audio/common_audio_c/spl_sqrt_floor.obj
[57/12427] CC obj/third_party/webrtc/common_audio/common_audio_c/resample_by_2.obj
[58/12427] CC obj/third_party/webrtc/common_audio/common_audio_c/webrtc_vad.obj
[59/12427] CC obj/third_party/webrtc/common_audio/common_audio_c/spl_init.obj
[60/12427] CXX obj/third_party/webrtc/common_audio/common_audio/sparse_fir_filter.obj
[61/12427] CXX obj/third_party/webrtc/common_audio/common_audio/real_fourier_ooura.obj
[62/12427] CXX obj/third_party/webrtc/common_audio/common_audio_cc/dot_product_with_scale.obj
ninja: build stopped: subcommand failed.
jom: C:\Qt\qt-everywhere-src-5.10.1\qtwebengine\src\core\Makefile.gn_run.Debug [run_ninja] Error 1
jom: C:\Qt\qt-everywhere-src-5.10.1\qtwebengine\src\core\Makefile.gn_run [debug-all] Error 2
jom: C:\Qt\qt-everywhere-src-5.10.1\qtwebengine\src\core\Makefile [sub-gn_run-pro-make_first] Error 2
jom: C:\Qt\qt-everywhere-src-5.10.1\qtwebengine\src\Makefile [sub-core-make_first] Error 2
jom: C:\Qt\qt-everywhere-src-5.10.1\qtwebengine\Makefile [sub-src-make_first] Error 2
jom: C:\Qt\qt-everywhere-src-5.10.1\Makefile [module-qtwebengine-make_first] Error 2

C:\Qt\qt-everywhere-src-5.10.1>

请注意,对于空列表和dicts,这将返回True。

答案 3 :(得分:0)

df2.applymap(type)==type({})
Out[1044]: 
    col1   col2
0  False  False
1  False   True

在确认之后

df2['C']=(df2.applymap(type)==type({})).any(1)
df2
Out[1052]: 
   col1 col2      C
0     1    3   False
1     2   {}    True