首頁 > 軟體

Pandas篩選DataFrame含有空值的資料行的實現

2022-07-24 14:02:11

資料準備

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空值行內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com