热线电话:13121318867

登录
2020-08-23 阅读量: 4310
Pandas 对DataFrame的缺失值NA值处理4种方法总结

数据清洗是一项复杂且繁琐的工作,有人说一个分析项目80%的时间都是在清洗数据

数据清洗的目的有两个,第一是通过清洗让数据可用。第二是让数据变的更适合进行后续的分析工作。换句话说就是有”脏”数据要洗,干净的数据也要洗


目录

1. 相关函数

2. 删除缺失值:dropna函数

3. 替换缺失值:fillna函数

4. 判断缺失值:isna函数

5. 判断缺失值:notna函数


1. 相关函数

删除缺失值:df.dropna()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

填充缺失值:df.fillna()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

判断缺失值:df.isna()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.isna.html

判断缺失值:df.notna()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.notna.html

2. 删除缺失值:dropna函数

dropna参数列表:

DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)

输入:

import numpy as npimport pandas as pddf = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],"toy": [np.nan, 'Batmobile', 'Bullwhip'],"born": [pd.NaT, pd.Timestamp("1940-04-25"),pd.NaT]})
# df#        name        toy       born# 0    Alfred        NaN        NaT# 1    Batman  Batmobile 1940-04-25# 2  Catwoman   Bullwhip        NaT

1. dropna默认参数。删除含有NA的行。其中axis=0表示删除行,how='any'表示有一个NA就删除整行/列。

df.dropna()#      name        toy       born# 1  Batman  Batmobile 1940-04-25

2. 删除含有NA的列。参数axis=1或axis='columns'。

df.dropna(axis='columns')#        name# 0    Alfred# 1    Batman# 2  Catwomandf.dropna(axis=1)#        name# 0    Alfred# 1    Batman# 2  Catwoman

3. 当所有行/列为NA时才删除。参数how='all'。

df.dropna(how='all')#        name        toy       born# 0    Alfred        NaN        NaT# 1    Batman  Batmobile 1940-04-25# 2  Catwoman   Bullwhip        NaT

4. 提高删除NA的阈值。参数thresh=2,表示行/列中的NA数量大于2才删除。

df.dropna(thresh=2)#        name        toy       born# 1    Batman  Batmobile 1940-04-25# 2  Catwoman   Bullwhip        NaT

5.设置判断的子集。参数subset设置待判断的列/行名,这些列/行中有NA值则所在行/列被删除。

df.dropna(subset=['name', 'born'])#      name        toy       born# 1  Batman  Batmobile 1940-04-25

6. 将处理后的df替换原本的df。参数inplace=True。

df.dropna(inplace=True)df#      name        toy       born# 1  Batman  Batmobile 1940-04-25

3. 替换缺失值:fillna函数

fillna参数列表:

DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

输入:

import numpy as npimport pandas as pddf = pd.DataFrame([[np.nan, 2, np.nan, 0],[3, 4, np.nan, 1],[np.nan, np.nan, np.nan, 5],[np.nan, 3, np.nan, 4]],columns=list('ABCD'))
df#      A    B   C  D# 0  NaN  2.0 NaN  0# 1  3.0  4.0 NaN  1# 2  NaN  NaN NaN  5# 3  NaN  3.0 NaN  4

1. fillna默认参数。传入值,填充所有NA。

df.fillna(0)#      A    B    C  D# 0  0.0  2.0  0.0  0# 1  3.0  4.0  0.0  1# 2  0.0  0.0  0.0  5# 3  0.0  3.0  0.0  4

2. 设定每列NA的填充值。value为字典格式。

values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}df.fillna(value=values)#      A    B    C  D# 0  0.0  2.0  2.0  0# 1  3.0  4.0  2.0  1# 2  0.0  1.0  2.0  5# 3  0.0  3.0  2.0  4

3. 用前向值/后向值填充NA。method='fillna'表示NA被前一个值填充。例如A列2行的NA被A列1行的3.0填充,B列2行的NA被B列1行的4.0填充。

df.fillna(method='ffill')#      A    B   C  D# 0  NaN  2.0 NaN  0# 1  3.0  4.0 NaN  1# 2  3.0  4.0 NaN  5# 3  3.0  3.0 NaN  4

4. 设定每列/行的填充数。limit=1表示每列/行仅仅填充1个NA。

df.fillna(value=values, limit=1)#      A    B    C  D# 0  0.0  2.0  2.0  0# 1  3.0  4.0  NaN  1# 2  NaN  1.0  NaN  5# 3  NaN  3.0  NaN  4

5. 参数axis和inplace与dropna相同。

4. 判断缺失值:isna函数

1. 判断df中所有值是否为NA。

df.isna()#     name    toy   born# 0  False   True   True# 1  False  False  False# 2  False  False   True

2. 判断某一列(series格式)的值是否为NA。

df['toy'].isna()# 0     True# 1    False# 2    False# Name: toy, dtype: bool

5. 判断缺失值:notna函数

与isna的结果完全相反,用法一样。

df.notna()#    name    toy   born# 0  True  False  False# 1  True   True   True# 2  True   True  False
df['toy'].notna()# 0    False# 1     True# 2     True# Name: toy, dtype: bool


38.0029
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子