儒冠多误身
2019.04.20个人总结
- 第一步:备份源数据到其他盘符、硬盘、u盘、网盘等
- 需求分析
- 数据提取
- 数据清洗
- 数据分析
- 报告撰写
- 报告分享
- 投入应用收集反馈
文章目录
1. 目标确定
2. 数据获取
数据来源
- 数据可信度
3. 数据清洗
3.1 预处理
3.1.1 读取
pd.read_csv('demo.csv',na_values=['XYZ','NA','-999',0])
3.1.2 观察
-
基本框架
.shape .info() .head() pd.value_counts(df['col']) df['col'].value_counts()
-
数据特征
- 连续型数据
- 离散型数据
-
索引值是可以重复的
df.index.is_unique
-
重命名
df.rename(index=str.lower,columns={ 'col1':'a','col2':'b'})
3.1.3 关联
-
pd.merge(),相当于SQL的join
pd.merge(left,right,left_on=,right_on=,suffixes=('_x','__y'))
-
pd.concat(),堆叠
pd.concat([df1,df2,df3,s1],axis=1)# index pd.concat([s1,s2,s3])
- axis=0,columns
-
df1.join(df2)
,按照index连接 -
df1.combine_first(df2)
,修补- 结果会同时包含df1和df2的行与列
- df1的缺失值NaN,会被df2对应位置的数值修补
def func(x): a = str(x) return pd.Series(a+'_a') df_new=df['col'].apply(func) df_new.rename(columns={ }) df.combine_first(df_new)
-
s1.combine_first(s2)
修补 -
np.concatenate([arr1,arr2])
- axis=1,左右连接
- axis-0,堆叠
-
map函数
-
a = { 'col1_1':'a','col1_3':'c'} df['col1'].map(a)
-
3.2 缺失值
3.2.1 缺失值统计
-
是否有缺失值
- 缺失的原因
-
诊断
len(df['col'].unique()) len(df) df['col'].duplicatd() df['col'].drop_duplicates() df.drop_duplicates(subset=['col1','col3'],keep=False,inpalce=True) df.isnull().values.any() df.isnull().any() df['col'].isnull() df['col'].isnull().values.any()
-
统计
df.isnull().sum() df.isnull().sum().sum() df.isnull().sum() / df.count()# 缺失值占比
3.2.2 缺失值填充
-
舍弃
df.dropna() df.dropna(how='any') df.dropna(thresh = 3)# 每行缺失值超过3个的都舍弃 df.dropna(how='all',axis=1)# 列
-
填充
df.fillna(0) df.fillna({ 'col1':1,'col3':11}) df.fillna(method='ffill') df.fillna(method='bfill',limit=3)# 限制填充数量 df['col'].fillna(df['col'].mean()) df['col'].fillna(df.groupby('col')[].transform('mean'))#其结构与df的结构一致
-
内插法补齐[处理有规律数据,时间戳等]
df.interpolate()
3.3 重复值
-
统计
df.duplicated(subset=['col1','col3']).value_counts()
-
先排序,再去重
df.sort_values(by='col1').dropduplicates(subset=['col2','col3'])
- 排序会将col1列NaN值放在最下面,可确保去重时不会将该列为NaN的值保留
- 因为去重时,默认保留第一次出现的行
-
去重的用法
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
- keep,默认:删除重复项并保留第一次出现的元素
'first','last','False'
,False:一行都不保留
- keep,默认:删除重复项并保留第一次出现的元素
3.4 转换
3.4.1 格式转换
-
要注意判断,是否包含不能转换的元素
df.col.astype()
3.4.2 字符串转换
3.4.2.1 拆分字符串
-
拆分字符串
Series.str.split(pat=None, n=-1, expand=False)
- pat:分隔符,默认为所有空字符,包括空格、换行符\n、制表符\t
- n:切几刀,默认-1,有多少切多少
- expand=
- False,返回Series
- True,返回DataFrame
- 结合df1.combine_first(df_new)