pandas缺失值处理
⽂章⽬录
创建数据
import pandas as pd
import numpy as np
data = pd.DataFrame({'a': [1, 2, 4, np.nan,7, 9], 'b': ['a', 'b', np.nan, np.nan, 'd', 'e'], 'c': [np.nan, 0, 4, np.nan, np.nan, 5], 'd': [np.nan, np.nan, np.nan, np.na n, np.nan, np.nan]})
a    b    c  d
0  1.0    a  NaN NaN
1  2.0    b  0.0 NaN
2  4.0  NaN  4.0 NaN
3  NaN  NaN  NaN NaN
4  7.0    d  NaN NaN
5  9.0    e  5.0 NaN
判断是否有缺失值及统计
print(data.isnull().any())
a    True
b    True
c    True
d    True
print(data.isnull().sum())  #t统计每⼀列的缺失值个数
a    1
b    2
c    3
d    6
删除含有缺失值的⾏、列
axis 参数⽤于控制⾏或列,跟其他不⼀样的是,axis=0 (默认)表⽰操作⾏,axis=1 表⽰操作列。
how 参数可选的值为 any(默认) 或者 all。any 表⽰⼀⾏/列有任意元素为空时即丢弃,all ⼀⾏/列所有值都为空时才丢弃。
subset 参数表⽰删除时只考虑的索引或列名。
thresh参数的类型为整数,它的作⽤是,⽐如 thresh=3,会在⼀⾏/列中⾄少有 3 个⾮空值时将其保留。
df = data.dropna(axis=0,how='all')  #data不会改变
print(df)
a    b    c  d
0  1.0    a  NaN NaN
1  2.0    b  0.0 NaN
2  4.0  NaN  4.0 NaN
4  7.0    d  NaN NaN
5  9.0    e  5.0 NaN
df = data.dropna(axis=0,how='any')  #data不会改变
print(df)
out:
Empty DataFrame
Columns: [a, b, c, d]
unknown怎么处理Index: []
df = data.dropna(axis=0,how='any',subset=["b"]) #subset 只考虑的⾏或列
print(df)
对列操作将axis换为1
缺失值补充
最常见的是使⽤ fillna 完成填充。
data.fillna(0)
除了可以使⽤标量来填充之外,还可以使⽤前⼀个或后⼀个有效值来填充。
设置参数 method=‘pad’ 或 method=‘ffill’ 可以使⽤前⼀个有效值来填充。
设置参数 method=‘bfill’ 或 method=‘backfill’ 可以使⽤后⼀个有效值来填充。
除了通过 fillna ⽅法来填充缺失值外,还可以通过 interpolate ⽅法来填充。默认情况下使⽤线性差值,可以是设置 method 参数来改变⽅式。
缺失值替换
None、np.nan、NaT 这些都是缺失值。这些在 Pandas 的眼中是缺失值,有时候在我们⼈类的眼中,某些异常值我们也会当做缺失值来处理。
例如,在我们的存储的⽤户信息中,假定我们限定⽤户都是青年,出现了年龄为 40 的,我们就可以认为这是⼀个异常值。再⽐如,我们都知道性别分为男性(male)和⼥性(female),在记录⽤户性别的时候,对于未知的⽤户性别都记为了 “unknown”,很明显,我们也可以认为“unknown”是缺失值。此外,有的时候会出现空⽩字符串,这些也可以认为是缺失值。
对于上⾯的这种情况,我们可以使⽤ replace ⽅法来替换缺失值。
place({“age”: 40, “birth”: pd.Timestamp(“1978-08-08”)}, np.nan) #将年龄40替换 ⽇期为1978-08-08也替换
也可采⽤正则表达式替换
user_place(r’\s+’, np.nan, regex=True)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。