Pandas篩選DataFrame含有空值的數據行的實現
數據準備
import pandas as pd df = pd.DataFrame([['ABC','Good',1], ['FJZ',None,2], ['FOC','Good',None] ],columns=['Site','Remark','Quantity'])
df
註意:上述Remark字段中的數據類型為字符串str類型,空值取值為'None',Quantity字段中的數據類型為數值型,空值取值為nan
1.篩選指定單列中有空值的數據行
# 語法 df[pd.isnull(df[col])] df[df[col].isnull()]
# 獲取Remark字段為None的行 df_isnull_remark = df[df['Remark'].isnull()] # 獲取Quantity字段為None的行 df_isnull_quantity = df[df['Quantity'].isnull()]
df_isnull_remark
df_isnull_quantity
提示
篩選指定單列中沒有空值的數據行
# 語法 df[pd.notnull(df[col])] df[df[col].notnull()]
# 獲取Remark字段為非None的行 df_notnull_remark = df[df['Remark'].notnull()] # 獲取Quantity字段為非None的行 df_notnull_quantity = df[df['Quantity'].notnull()]
df_notnull_remark
df_notnull_quantity
2.篩選指定多列中/全部列中滿足所有列有空值的數據行
# 語法 df[df[[cols]].isnull().all(axis=1)] df[pd.isnull(df[[cols]]).all(axis=1)]
在df基礎上增加一行生成df1
df1 = pd.DataFrame([['ABC','Good',1], ['FJZ',None,2], ['FOC','Good',None], [None,None,None] ],columns=['Site','Remark','Quantity'])
# 獲取df1所有列有空值的數據行 all_df_isnull = df1[df1[['Site','Remark','Quantity']].isnull().all(axis=1)]
all_df_isnull
提示
篩選指定多列中/全部列中滿足所有列沒有空值的數據行
# 語法 df[df[[cols]].notnull().all(axis=1)] df[pd.notnull(df[[cols]]).all(axis=1)]
# 獲取df1所有列沒有空值的數據行 all_df_notnull = df1[df1[['Site','Remark','Quantity']].notnull().all(axis=1)]
all_df_notnull
3.篩選指定多列中/全部列中滿足任意一列有空值的數據行
# 語法 df[df[[cols]].isnull().any(axis=1)] df[pd.isnull(df[[cols]]).any(axis=1)]
df1(數據源)
# 獲取df1所有列中滿足任意一列有空值的數據行 any_df_isnull = df1[df1[['Site','Remark','Quantity']].isnull().any(axis=1)]
any_df_isnull
提示
篩選指定多列中/全部列中滿足任意一列沒有空值的數據行
# 語法 df[df[[cols]].notnull().any(axis=1)] df[pd.notnull(df[[cols]]).any(axis=1)]
# 獲取df1所有列中滿足任意一列沒有空值的數據行 any_df_notnull = df1[df1[['Site','Remark','Quantity']].notnull().any(axis=1)]
any_df_notnull
Numpy裡邊查找NaN值的話,使用np.isnan()
Pabdas裡邊查找NaN值的話,使用.isna()或.isnull()
import pandas as pd import numpy as np df = pd.DataFrame({'site1': ['a', 'b', 'c', ''], 'site2': ['a', np.nan, '', 'd'], 'site3': ['a', 'b', 'c', 'd']})
df
df['contact_site'] = df['site1'] + df['site2'] + df['site3']
新增數據列後的df
res1 = df[df['site2'].isnull()] res2 = df[df['site2'].isna()] res3 = df[df['site2']=='']
res1
res2
res3
註意:res1和res2的結果相同,說明.isna()和.isnull()的作用等效
到此這篇關於Pandas篩選DataFrame含有空值的數據行的實現的文章就介紹到這瞭,更多相關Pandas篩選DataFrame空值行內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 使用pandas或numpy處理數據中的空值(np.isnan()/pd.isnull())
- 淺談pandas中對nan空值的判斷和陷阱
- pandas中NaN缺失值的處理方法
- Python缺失值處理方法
- Pandas 篩選和刪除目標值所在的行的實現