【Python数据处理专题】数据处理和分析的基本流程

儒冠多误身

2019.04.20个人总结

  • 第一步:备份源数据到其他盘符、硬盘、u盘、网盘等
  1. 需求分析
  2. 数据提取
  3. 数据清洗
  4. 数据分析
  5. 报告撰写
  6. 报告分享
  7. 投入应用收集反馈

文章目录

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:一行都不保留

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)
    • 4
      点赞
    • 23
      收藏
      觉得还不错? 一键收藏
    • 1
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值