python pandas 数据清理常用步骤

  1.  读取文件
    import pandas as pd
    data = pd.read_csv("modified_titanic_data.csv")
    data.head()
  2. 删除无用列
    data.drop(["Pclass","Unnamed: 13"],inplace=True,axis=1)
    data.head()
  3. 类型转换 
      转换的目的就是为了好分析 把唯一标识转换为字符串 方便匹配 把日期形式的字符串转换为日期形式,方便后续的操作

    data.info()
    data["PassengerId"] = data["PassengerId"].astype("str")
    data["OnboardTime"] = data["OnboardTime"].astype("datetime64")
  4. 删除重复行
      首先判断是否有重复行

    data[data.duplicated(keep=False)]

    然后删除重复行

    data.drop_duplicates(keep="first",inplace=True)

    最后重置索引列,因为删除之后,只是把对应的列给删除了,索引并没有修改

    data.reset_index(drop=True,inplace=True)
  5. 规范数据格式

    data["Sex"].unique()
    # array(['male', 'female', 'm', 'm ', 'M', 'F', 'f'], dtype=object)

    就针对性别这一行 存在很多不规范的现象 需要转换为male或者female。使用map数据映射规范数据。

    data["Sex"] = data["Sex"].map({
        "male":"male",
        "m":"male",
        "M":"male",
        "m ":"male",
        "F":"female",
        "f":"female",
        "female":"female"
    })
  6. 缺失值处理 

    data["Age"].unique()
    array(['22', '-', '26', 'na', '35', nan, '54', '2', '14', '4', '58', '20',
           '39', '55', '31', '34', '15', '28', '8', '38', '19', '40', '66',
           '42', '21', '18', '27', '3', '7', '49', '29', '65', '28.5', '5',
           '11', '45', '17', '32', '16', '25', '0.83', '30', '33', '23', '24',
           '46', '59', '71', '37', '47', '14.5', '70.5', '32.5', '12', '9',
           '36.5', '51', '55.5', '40.5', '44', '1', '61', '56', '50', '36',
           '45.5', '20.5', '62', '41', '52', '63', '23.5', '0.92', '43', '60',
           '10', '64', '13', '48', '0.75', '53', '57', '80', '70', '24.5',
           '6', '0.67', '30.5', '0.42', '34.5', '74'], dtype=object)

    存在一些字符串形式的nan 还有一些不规范的“-”需要进行修改,修改成真正的缺失值。并且把age这一列修改成浮点型,方便后续的操作。

    import numpy as np
    data["Age"]=data["Age"].replace("na",np.NaN).replace("-",np.NaN)
    data["Age"].astype("float",inplace = True)
  7. 日期的那一列 只需要年月日,不需要具体到每天的时间。所以说需要提取想对应的年月日。

    data["OnboardTime"] =data["OnboardTime"].dt.strftime('%Y-%m-%y')
    data["OnboardTime"] = data["OnboardTime"].apply(lambda x:str(x)[0:10])

    在这里,可以使用以上两种方法,个人推荐第二种方法,调用pandas时间序列的方法,就可以提取相对应的数据。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值