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

本文介绍了如何在Python中处理数据类型转换,特别是将字符串形式的日期转换为日期和日期时间类型。此外,还讲解了冗余数据的删除方法,包括去除缺失值和重复数据。dropna()函数用于删除包含缺失值的行,而duplicated()和drop_duplicates()方法用于检测和删除重复观测,可以按特定列进行判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()
idgenderageeducustom_amtorder_date
0890female43.0NaN¥2177.942018年12月25日
12391male52.0NaN¥2442.182017年5月24日
22785male39.0NaN¥849.792018年5月15日
31361female26.0NaN¥2482.222018年5月16日
4888female61.0本科¥2027.92018年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
namegenderageincomeedu
0张三2915600本科
1李四2514000本科
2王二2718500硕士
3张三2915600本科
4赵五2110500大专
5丁一2218000本科
6王二2713000硕士
# 默认情况下,对每行所有变量进行判断,删除第二条重复行,删除第二行的张三
df.drop_duplicates()
namegenderageincomeedu
0张三2915600本科
1李四2514000本科
2王二2718500硕士
4赵五2110500大专
5丁一2218000本科
6王二2713000硕士
# 根据用户姓名和年龄来删除重复值
df.drop_duplicates(subset = ['name','age'])
namegenderageincomeedu
0张三2915600本科
1李四2514000本科
2王二2718500硕士
4赵五2110500大专
5丁一2218000本科

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值