• 数据清洗之数据转换 日期格式、字符串、高阶函数


    数据清洗之数据转换

     

    1.日期格式数据处理

    In [ ]:
    import numpy as np
    import pandas as pd
    
    In [ ]:
    import os
    os.chdir(r'F:CSDN课程内容代码和数据')
    
    In [ ]:
    df = pd.read_csv('baby_trade_history.csv', encoding='utf-8',dtype={'user_id':str})
    
    In [ ]:
    df.head(10)
    
    In [ ]:
    # 对购买日期进行转换,将文本格式转化为日期格式
    df['buy_date'] = pd.to_datetime(df['day'],format='%Y%m%d',errors = 'coerce')#加errors防止报错
    df.info
    In [ ]:
    df.dtypes
    
    In [ ]:
    # da ta time64格式的数据可以提取对应年月日,必须为timestamp才可以,具体的时间点
    df['buy_date'].dt.year
    
     
    • 时间差
    In [ ]:
    # 对时间进行计算
    df['diff_day'] =  pd.datetime.now() - df2['birthday']
    
    In [ ]:
    df['diff_day'].head(5)
    
    In [ ]:
    # 时间差由天数,小时和毫秒构成
    
    In [ ]:
    # timedelta可以理解为时间差类型(当且仅当数据类型是datatime64或timedelta64)
    df['diff_day'].dt.days# 提取天数
    
    In [ ]:
    df['diff_day'].dt.seconds# 提取秒数
    
    In [ ]:
    df['diff_day'].dt.microseconds# 提取毫秒数
    In [ ]:
    # 可以使用pd.Timedelta进行转换
    df['时间差'] = df['diff_day']/pd.Timedelta('1 D') #转换为天数
    
    In [ ]:
    df['时间差'] = df['diff_day']/pd.Timedelta('1 M') #转换为分钟
    
    In [ ]:
    df['时间差'].head(5)
    
    In [ ]:
    df['时间差'].round(decimals=3)# 科学计数转化为显示为3小数
    
    In [ ]:转化
    df['diff_day'].astype('timedelta64[D]')# 这种方式也可以,M  代表月份数,D代表天数,Y代表年份
    
     

    2. 字符串数据处理

     
    • 摩托车的销售情况
     
    • Condition:摩托车新旧情况(new:新的 和used:使用过的)
    • Condition_Desc:对当前状况的描述
    • Price:价格
    • Location:发获地址
    • Model_Year:购买年份
    • Mileage:里程
    • Exterior_Color:车的颜色
    • Make:制造商(牌子)
    • Warranty:保修
    • Model:类型
    • Sub_Model:车辆类型
    • Type:种类
    • Vehicle_Title:车辆主题
    • OBO:车辆仪表盘
    • Watch_Count:表数
    In [ ]:
    df1 = pd.read_csv('MotorcycleData.csv',encoding='gbk')#摩托车信息
    
    In [ ]:
    df1.head(5)
    
    In [ ]:取price这个字符串里面的前1~4个字符
    df1['Price'].str[0:4]# 字符串切片
    
     
    • 将价格转换为float
    In [ ]:
    df1['Price'].astype(float)
    
    In [ ]:
    # 之间转换直接报错,需要进行字符串处理
    去除某些符号 df1['价格'] = df1['Price'].str.strip('$')#字符串相关方法
    In [ ]:替换某些符号
    df1['价格'] = df1['价格'].str.replace(',','')
    
    In [ ]:
    df1['价格'] = df1['价格'].astype(float)#  转换为float数据
    
    In [ ]:
    df1.Model.head(5)
    
    In [ ]:
    df1['Location'].str.split(',') # 使用字符串分割,用于对文本的处理,将这个字符串按照指定的符号分割,返回一个list
    
    In [ ]:
    df1['Mileage'].str.len() #计算字符串长度,获取当前标签的每个数据的长度
    
     

    3. 高阶函数数据处理

    In [ ]:
    df2 = pd.read_csv('sam_tianchi_mum_baby.csv',encoding = 'utf-8',dtype =str)#婴儿信息
    
    In [ ]:
    def f(x):
        if '0' in x:
            return '女'
        elif '1' in x :
            return '男'
        else:
            return '未知'
    
    In [ ]:
    # 0代表女,1代表男,2代表未知
    df2['性别'] = df2['gender'].apply(f)
    
    In [ ]:
    df2.head(4)
    df2[df2['gender']=='2']#选择2这个性别的所有数据
    In [ ]:
    #使用map函数映射
    df2['性别'] = df2['gender'].map({'0':'女','1':'男','2':'未知'})
    df2['性别'] = df2['gender'].map(f)
    In [ ]:
    df2['user_id'].apply(lambda x: x.replace(x[1:3],'**')) #结合lambda替换,这里隐藏了第2、3两个位置的userid的值,由此可以运用到电话、密码或者身份证这些上面
    
    In [ ]:
    df2['birthday'].apply(lambda x: str(x)[0:4]) #提取标签为birthday的字符串里面的1~4的部分,即年份
    
    In [ ]:
     
  • 相关阅读:
    为Android编译bash
    编译toybox
    RGB信仰灯
    如何用Fiddler抓BlueStacks的HTTPS包
    Adobe Acrobat快捷方式
    [MS-SHLLINK]: Shell Link (.LNK) Binary File Format
    BZOJ 3993 星际战争
    BZOJ 3996 线性代数
    BZOJ 1797 最小割
    BZOJ 2726 任务安排
  • 原文地址:https://www.cnblogs.com/xingnie/p/12264498.html
Copyright © 2020-2023  润新知