pandas学习-缺失数据

学习链接: https://github.com/datawhalechina/joyful-pandas/blob/master/%E7%AC%AC6%E7%AB%A0%20%E7%BC%BA%E5%A4%B1%E6%95%B0%E6%8D%AE.ipynb.

六、缺失数据

  • 6.1缺失值查看
  • 6.2缺失值符号
  • 6.3填充与删除
  • 6.4插值
  • 问题与练习

6.1缺失值查看

  • isna()、isnull():如果是缺失值返回True,否则返回False
  • notna():如果不是缺失值返回True,否则返回False
  • info():输出整个表所有列的数据类型
  • 常用操作
df.isna().sum()					#每列有多少缺失值
df[df['Physics'].isna()]		#某列缺失值所在行
df[df.notna().all(1)]			#去掉所有含缺失值所在行
df[df.notna().any(1)]			#至少有一个不是缺失值

6.2缺失值符号

  • np.nan

  • None

  • NaT
    NaT是针对时间序列的缺失值,是Pandas的内置类型,可以完全看做时序版本的np.nan,与自己不等,且使用equals是也会被跳过

  • NA
    Nullable类型与NA符号
    这是Pandas在1.0新版本中引入的重大改变,其目的就是为了(在若干版本后)解决之前出现的混乱局面,统一缺失值处理方法。 前面提到的三种缺失值都会被替换为统一的NA符号,且不改变数据类型。

pd.read_csv('data/table_missing.csv').convert_dtypes()		#在读取数据时,就把数据列转为Nullable类型

6.3填充与删除

  • 填充 fillna()
df.fillna(df.mean())		#平均值填充

pandas学习-缺失数据_第1张图片
method=‘ffill’ 向前填充,method=‘backfill’ 向后填充

  • 删除 dropna()
    在这里插入图片描述
    axis=0 行,axis=1 列
    how=‘all’ 去除全为缺失值所在行(列),how=‘any’ 去除存在缺失值在行(列)
    subset=[‘A’,‘B’] 在某一组范围内搜索缺失值

6.4插值

  • interpolation() 线性插值
    在这里插入图片描述
    method=‘index’ 插值依赖索引,默认插值与索引无关
    limit=2 表示最多插入多少个
    limit_direction表示插值方向,可选forward,backward,both,默认前向
    limit_area表示插值区域,可选inside,outside,默认None

问题与练习

#1(a)
df = pd.read_csv(r"D:\python\python3.6\pysl\Pre_\data\Missing_data_one.csv").convert_dtypes()
df[df['C'].isna()]
#1(b)
min_b = df['B'].min()
df['A'] = pd.Series(list(zip(df['A'].values, df['B'].values))).apply(lambda x:                                                                  x[0] if np.random.rand()>0.25*x[1]/min_b else np.NaN)
#2(a)
df1 = pd.read_csv(r"D:\python\python3.6\pysl\Pre_\data\Missing_data_two.csv")
num = df1['编号'].count()
df1.isna().sum()/num

df1_3not = df1[df1.iloc[:, -3:].isna().sum(1)<=1]
#2(b)
df11 = df1.copy()
for name,group in df11.groupby('地区'):
    df11.loc[group.index, '体重'] = group[['身高', '体重']].sort_values(by='身高').interpolate()['体重']
df11['体重'] = df11['体重'].round(2)

你可能感兴趣的:(pandas)