1.空数据
-
None
-
python自带的空对象,不能参与到任何计算中
-
object类型的运算要比int类型的运算慢
-
-
np.nan
-
浮点类型,能参与到计算中,但结果总是NaN
-
可以使用np.nan*()函数来计算nan,此时会过滤掉nan
-
2.Pandas中的None与Nan
(1)Pandas中None与np.nan都视作np.nan
import numpy as np
import pandas as pd
data = np.random.randint(0,100,size=(5,5))
df = pd.DataFrame(data=data,columns=list('ABCDE'))
print(df)
print('###################################')
df.loc[2,'B'] = np.nan
df.loc[3,'C'] = None
print(df)
(2)Pandas中None与np.nan的操作
-
判断函数(isnull()和notnull())
import numpy as np
import pandas as pd
data = np.random.randint(0,100,size=(5,5))
df = pd.DataFrame(data=data,columns=list('ABCDE'))
df.loc[2,'B'] = np.nan
df.loc[3,'C'] = None
print(df)
print('###################################')
print(df.isnull())
print('###################################')
print(df.notnull())
-
all()与any()
-
all():必须全部为True才会是True
-
any():只要有一个为True就为True
-
import numpy as np
import pandas as pd
data = np.random.randint(0,100,size=(5,5))
df = pd.DataFrame(data=data,columns=list('ABCDE'))
df.loc[2,'B'] = np.nan
df.loc[3,'C'] = None
print(df)
print('###################################')
#找有空值的列
print(df.isnull().any())
print('###################################')
#找都为空值的列
print(df.isnull().all())
print('###################################')
#找没有都是空值的列
print(df.notnull().any())
print('###################################')
#找没有空值的列
print(df.notnull().all())
print('###################################')
#找有空的行
print(df.isnull().any(axis=1))
print('###################################')
#找都为空的行
print(df.isnull().all(axis=1))
print('###################################')
#找没有都是空值的行
print(df.notnull().any(axis=1))
print('###################################')
#找没有空的行
print(df.notnull().all(axis=1))
print('###################################')
3.空值置过滤
(1)使用bool值索引过滤数据
import numpy as np
import pandas as pd
data = np.random.randint(0,100,size=(5,5))
df = pd.DataFrame(data=data,columns=list('ABCDE'))
df.loc[2,'B'] = np.nan
df.loc[3,'C'] = None
print(df)
print('###################################')
#过滤行
cond = df.isnull().any(axis=1)
print(df[~cond])
print('###################################')
cond1 = df.notnull().all(axis=1)
print(df[cond1])
#过滤列
cond3 = df.isnull().any()
print(df.loc[:,~cond3])
print('###################################')
cond4 = df.notnull().all()
print(df.loc[:,cond3])
(2)使用dropna()过滤,默认删除有空的行
import numpy as np
import pandas as pd
data = np.random.randint(0,100,size=(5,5))
df = pd.DataFrame(data=data,columns=list('ABCDE'))
df.loc[2,'B'] = np.nan
df.loc[3,'C'] = None
print(df)
print('###################################')
#删除有空的行
print(df.dropna())
print('###################################')
#删除有空的列
print(df.dropna(axis=1))
print('###################################')
#一列数据都为空才会过滤
print(df.dropna(how='all'))
print('###################################')
#一行数据都为空才会过滤
print(df.dropna(how='all',axis=1))
print('###################################')
#一行数据都为空才会过滤
df2 = df.copy
print('原df2:\n',df2)
print('###################################')
df2.dropna(inplace=True)
print('新df2:\n',df2)
print('###################################')
4.填充函数
import numpy as np
import pandas as pd
data = np.random.randint(0,100,size=(5,5))
df = pd.DataFrame(data=data,columns=list('ABCDE'))
df.loc[2,'B'] = np.nan
df.loc[3,'C'] = None
print(df)
print('###################################')
#填充nan
print(df.fillna(value=100))
print('###################################')
#limit:限制填充次数
df2 = df.copy()
df2.loc[1,'B'] = np.nan
df2.loc[2,'C'] = np.nan
print(df2)
print('###################################')
print(df2.fillna(value=100,limit=1))
print('###################################')
print(df.fillna(method='ffill'))#向前填充
print('###################################')
print(df.fillna(method='backfill'))#向后填充
print('###################################')
print(df.fillna(method='ffill',axis=1))#向左填充
print('###################################')
print(df.fillna(method='backfill',axis=1))#向右填充
知识点为听课总结笔记,课程为B站“千锋教育Pandas数据分析从入门到实战,零基础小白保姆级Python数据分析教程”:001_Pandas_Pandas介绍_哔哩哔哩_bilibili