python——类型转换和冗余数据删除

系统 1377 0

1.类型转换

            
              
                import
              
               pandas 
              
                as
              
               pd

              
                import
              
               datetime

            
          

一般我们拿到日期型数据时,基本都是字符串表示的,该如何将其转换为日期型和日期时间型。

法1:

            
              dt 
              
                =
              
              
                '2019/06/13 16:16:39'
              
              
d 
              
                =
              
              
                '2017-04-24'
              
              

str2datetime 
              
                =
              
               datetime
              
                .
              
              datetime
              
                .
              
              strptime
              
                (
              
              dt
              
                ,
              
              
                '%Y/%m/%d %H:%M:%S'
              
              
                )
              
              
str2date1 
              
                =
              
               datetime
              
                .
              
              datetime
              
                .
              
              strptime
              
                (
              
              d
              
                ,
              
              
                '%Y-%m-%d'
              
              
                )
              
              
str2date2 
              
                =
              
                datetime
              
                .
              
              datetime
              
                .
              
              strptime
              
                (
              
              d
              
                ,
              
              
                '%Y-%m-%d'
              
              
                )
              
              
                .
              
              date
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              str2datetime
              
                )
              
              
                print
              
              
                (
              
              str2date1
              
                )
              
              
                print
              
              
                (
              
              str2date2
              
                )
              
            
          
            
              2019-06-13 16:16:39
2017-04-24 00:00:00
2017-04-24

            
          

法2:

            
              
                # 字符串转换为时间格式
              
              

dt 
              
                =
              
               pd
              
                .
              
              DataFrame
              
                (
              
              
                [
              
              
                '2019/06/13 16:16:39'
              
              
                ,
              
              
                '2019-03-02 23:12:23'
              
              
                ,
              
              
                '2019-03-22 13:12:23'
              
              
                ,
              
              
                '2019-05-02 15:12:30'
              
              
                ,
              
              
                '2019-04-02 17:33:23'
              
              
                ,
              
              
                '20/05/02'
              
              
                ]
              
              
                )
              
              
                print
              
              
                (
              
              dt
              
                )
              
            
          
            
                                   0
0  2019/06/13 16:16:39
1  2019-03-02 23:12:23
2  2019-03-22 13:12:23
3  2019-05-02 15:12:30
4  2019-04-02 17:33:23
5             20/05/02

            
          
            
              dt
              
                .
              
              iloc
              
                [
              
              
                :
              
              
                ,
              
              
                0
              
              
                ]
              
              
                =
              
               pd
              
                .
              
              to_datetime
              
                (
              
              dt
              
                .
              
              iloc
              
                [
              
              
                :
              
              
                ,
              
              
                0
              
              
                ]
              
              
                ,
              
              
                format
              
              
                =
              
              
                '%Y-%m-%d'
              
              
                ,
              
              errors 
              
                =
              
              
                'coerce'
              
              
                )
              
              
                # 将其他格式显示成NaT
              
            
          
            
              
                print
              
              
                (
              
              dt
              
                )
              
            
          
            
                                  0
0 2019-06-13 16:16:39
1 2019-03-02 23:12:23
2 2019-03-22 13:12:23
3 2019-05-02 15:12:30
4 2019-04-02 17:33:23
5                 NaT

            
          
            
              salesDf
              
                =
              
              dt
              
                .
              
              dropna
              
                (
              
              how
              
                =
              
              
                'any'
              
              
                )
              
              
                print
              
              
                (
              
              salesDf
              
                )
              
            
          
            
                                  0
0 2019-06-13 16:16:39
1 2019-03-02 23:12:23
2 2019-03-22 13:12:23
3 2019-05-02 15:12:30
4 2019-04-02 17:33:23

            
          

2.冗余数据删除

1.删除缺失值
dropna() 默认删除含有缺失值的行,参数how = 'all’指删除全部为空值的行

            
              data3 
              
                =
              
               pd
              
                .
              
              read_excel
              
                (
              
              io
              
                =
              
              r
              
                'D:\BD\data3.xlsx'
              
              
                )
              
            
          
            
              data3
              
                .
              
              dtypes

            
          
            
              id              int64
gender         object
age           float64
edu            object
custom_amt     object
order_date     object
dtype: object

            
          
            
              data3
              
                .
              
              head
              
                (
              
              
                )
              
            
          
id gender age edu custom_amt order_date
0 890 female 43.0 NaN ¥2177.94 2018年12月25日
1 2391 male 52.0 NaN ¥2442.18 2017年5月24日
2 2785 male 39.0 NaN ¥849.79 2018年5月15日
3 1361 female 26.0 NaN ¥2482.22 2018年5月16日
4 888 female 61.0 本科 ¥2027.9 2018年1月21日

上述数据中用户id应为字符型,消费金额应为数值型,订单日期应为日期型

            
              
                # 用户id转换为字符型
              
              
data3
              
                [
              
              
                'id'
              
              
                ]
              
              
                =
              
               data3
              
                [
              
              
                'id'
              
              
                ]
              
              
                .
              
              astype
              
                (
              
              
                str
              
              
                )
              
              
                # 用户消费金额转换为数值型 ,消费金额中包含人民币符号'¥',所以要从第二个元素开始截断
              
              
data3
              
                [
              
              
                'custom_amt'
              
              
                ]
              
              
                =
              
               data3
              
                [
              
              
                'custom_amt'
              
              
                ]
              
              
                .
              
              
                str
              
              
                [
              
              
                1
              
              
                :
              
              
                ]
              
              
                .
              
              astype
              
                (
              
              
                float
              
              
                )
              
              
                # 订单日期转换为日期型
              
              
data3
              
                [
              
              
                'order_date'
              
              
                ]
              
              
                =
              
               pd
              
                .
              
              to_datetime
              
                (
              
              data3
              
                [
              
              
                'order_date'
              
              
                ]
              
              
                ,
              
              
                format
              
              
                =
              
              
                '%Y年%m月%d日'
              
              
                )
              
            
          

2.删除重复数据
data3.duplicated().any()

判断数据中是否存在重复观测,如果不加any(),则会返回一个与原数据行数相同的序列,使用了any()方法,则只返回一个值(True或False)

duplicated方法和drop_duplicates方法 都有一个重要的参数,默认情况下不设置该参数时,表示对数据的所有列进行重复性判断,如果需要按照指定的变量做数据的重复性判断时,就可以使用该参数指定具体的变量列表。

            
              
                # 构造数据
              
              
df 
              
                =
              
               pd
              
                .
              
              DataFrame
              
                (
              
              
                dict
              
              
                (
              
              name 
              
                =
              
              
                [
              
              
                '张三'
              
              
                ,
              
              
                '李四'
              
              
                ,
              
              
                '王二'
              
              
                ,
              
              
                '张三'
              
              
                ,
              
              
                '赵五'
              
              
                ,
              
              
                '丁一'
              
              
                ,
              
              
                '王二'
              
              
                ]
              
              
                ,
              
              
                      gender 
              
                =
              
              
                [
              
              
                '男'
              
              
                ,
              
              
                '男'
              
              
                ,
              
              
                '女'
              
              
                ,
              
              
                '男'
              
              
                ,
              
              
                '女'
              
              
                ,
              
              
                '女'
              
              
                ,
              
              
                '男'
              
              
                ]
              
              
                ,
              
              
                      age 
              
                =
              
              
                [
              
              
                29
              
              
                ,
              
              
                25
              
              
                ,
              
              
                27
              
              
                ,
              
              
                29
              
              
                ,
              
              
                21
              
              
                ,
              
              
                22
              
              
                ,
              
              
                27
              
              
                ]
              
              
                ,
              
              
                      income 
              
                =
              
              
                [
              
              
                15600
              
              
                ,
              
              
                14000
              
              
                ,
              
              
                18500
              
              
                ,
              
              
                15600
              
              
                ,
              
              
                10500
              
              
                ,
              
              
                18000
              
              
                ,
              
              
                13000
              
              
                ]
              
              
                ,
              
              
                      edu 
              
                =
              
              
                [
              
              
                '本科'
              
              
                ,
              
              
                '本科'
              
              
                ,
              
              
                '硕士'
              
              
                ,
              
              
                '本科'
              
              
                ,
              
              
                '大专'
              
              
                ,
              
              
                '本科'
              
              
                ,
              
              
                '硕士'
              
              
                ]
              
              
                )
              
              
                )
              
              
df

            
          
name gender age income edu
0 张三 29 15600 本科
1 李四 25 14000 本科
2 王二 27 18500 硕士
3 张三 29 15600 本科
4 赵五 21 10500 大专
5 丁一 22 18000 本科
6 王二 27 13000 硕士
            
              
                # 默认情况下,对每行所有变量进行判断,删除第二条重复行,删除第二行的张三
              
              
df
              
                .
              
              drop_duplicates
              
                (
              
              
                )
              
            
          
name gender age income edu
0 张三 29 15600 本科
1 李四 25 14000 本科
2 王二 27 18500 硕士
4 赵五 21 10500 大专
5 丁一 22 18000 本科
6 王二 27 13000 硕士
            
              
                # 根据用户姓名和年龄来删除重复值
              
              
df
              
                .
              
              drop_duplicates
              
                (
              
              subset 
              
                =
              
              
                [
              
              
                'name'
              
              
                ,
              
              
                'age'
              
              
                ]
              
              
                )
              
            
          
name gender age income edu
0 张三 29 15600 本科
1 李四 25 14000 本科
2 王二 27 18500 硕士
4 赵五 21 10500 大专
5 丁一 22 18000 本科

使用drop_duplicates方法删除重复数据,并不能直接影响到原始数据,即原始数据中还是存在重复观测的,若使用inplace = True,则会用删除后的数据替换原始数据


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论