数据清洗是一项复杂且繁琐的工作,有人说一个分析项目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








暂无数据