来自Python newb的简单问题。
我有一个包含 15+ 变量和数千条记录的数据帧。当"DOCTORSEE_DATE_TIME
"变量和"PT_ACUITY
"变量均为"Null"时,我想从此数据框中删除记录。
我有代码可以在DOCTORSEE_DATE_TIME或PT_ACUITY为 NULL 时删除记录,但我需要"要么"是"AND"。
TAT_v3 = TAT_v2.dropna(subset=['DOCTORSEE_DATE_TIME','PT_ACUITY'],how='all')
我尝试了这行代码,但得到并出错:
法典
TAT_v3 = TAT_v2.dropna((subset=['DOCTORSEE_DATE_TIME','PT_ACUITY'],how='all') & (subset=['PT_ACUITY'],how='all'))
错误
File "<ipython-input-14-6b23c103c833>", line 2
TAT_v3 = TAT_v2.dropna((subset=['DOCTORSEE_DATE_TIME','PT_ACUITY'],how='all') & (subset=['PT_ACUITY'],how='all'))
^
SyntaxError: invalid syntax
您可以将df.isnull()
与all()
一起使用,如下所示:
df = pd.DataFrame({
'DOCTORSEE_DATE_TIME': [1, np.nan, np.nan],
'PT_ACUITY': [2, 3, np.nan],
'SOME_OTHER_COL': [np.nan, 4, 5]
})
cols = ['DOCTORSEE_DATE_TIME', 'PT_ACUITY'] # choose columns that must all be null
results = df[~df[cols].isnull().all(axis=1)]
结果:
DOCTORSEE_DATE_TIME PT_ACUITY SOME_OTHER_COL
0 1.0 2.0 NaN
1 NaN 3.0 4.0
为什么这样做:
df[cols].isnull()
为每个单元格提供一个True
或False
值:
DOCTORSEE_DATE_TIME PT_ACUITY
0 False False
1 True False
2 True True
将.all(axis=1)
链接到此将结果减少到每行的单个True
或False
值(axis=0
将按列而不是按行检查(:
0 False
1 False
2 True
~
运算符用于取结果的反函数:
0 True
1 True
2 False
然后,这一系列True
、True
、False
用于切片我们的原始数据帧,因此只保留前两行。