python数据清洗--数据转换

本文介绍了Python数据清洗中的日期格式转换和字符串处理技巧。利用Pandas的to_datetime()方法将文本转为日期,通过dt属性获取日期部分,并使用timedelta处理时间差。在字符串处理中,Pandas提供了针对字符型变量的字符串函数,结合str方法和常规字符串方法进行数据清洗。此外,应用apply、astype和map等高阶函数对数据进行自定义转换和类型转换。

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

1. 日期格式数据处理

• Pandas中使用to_datetime()方法将文本格式转换为日期格式
• dataframe数据类型如果为datetime64,可以使用dt方法取出年月日等
• 对于时间差数据,可以使用timedelta函数将其转换为指定时间单位的数值
• 时间差数据,可以使用dt方法访问其常用属性

import numpy as np
import pandas as pd
import os
os.chdir(r'F:\优快云\课程内容\代码和数据')
df = pd.read_csv('baby_trade_history.csv', encoding='utf-8',dtype={'user_id':str})
df.head(10)
# 对购买日期进行转换
df['buy_date'] = pd.to_datetime(df['day'],format='%Y%m%d',errors = 'coerce')#加errors防止报错
df.dtypes
# 可以提取对应年月日,必须为timestamp才可以,具体的时间点
df['buy_date'].dt.year

时间差

# 对时间进行计算
df['diff_day'] =  pd.datetime.now() - df2['birthday']
df['diff_day'].head(5)
# 时间差由天数,小时和毫秒构成
# timedelta可以理解为时间差类型
df['diff_day'].dt.days# 提取天数
df['diff_day'].dt.seconds# 提取秒数
df['diff_day'].dt.microseconds# 提取毫秒数
# 可以使用pd.Timedelta进行转换
df['时间差'] = df['diff_day']/pd.Timedelta('1 D') #转换为天数
df['时间差'] = df['diff_day']/pd.Timedelta('1 M') #转换为分钟
df['时间差'].head(5)
df['时间差'].round(decimals=3)# 显示为3小数
df['diff_day'].astype('timedelta64[D]')# 这种方式也可以,M  代表月份数,D代表天数,Y代表年份

2. 字符串数据处理

• Pandas中提供了字符串的函数,但只能对字符型变量进行使用
• 通过str方法访问相关属性
• 可以使用字符串的相关方法进行数据处理
在这里插入图片描述

df1 = pd.read_csv('MotorcycleData.csv',encoding='gbk')#摩托车信息
df1.head(5)
df1['Price'].str[0:4]# 字符串切片
#将价格转换为float
df1['Price'].astype(float)
# 之间转换直接报错,需要进行字符串处理
df1['价格']  = df1['Price'].str.strip('$')#字符串相关方法
df1['价格'] = df1['价格'].str.replace(',','')
df1['价格'] = df1['价格'].astype(float)#  转换为float数据
df1.Model.head(5)
df1['Location'].str.split(',') # 使用字符串分割,用于对文本的处理
df1['Mileage'].str.len() #计算字符串长度

3. 高阶函数数据处理

• 在dataframe中使用apply方法,调用自定义函数对数据进行处理
• 函数apply, axis=0表示对行进行操作,axis=1表示对列进行操作
• 可以使用astype函数对数据进行转换
• 可以使用map函数进行数据转换

df2 = pd.read_csv('sam_tianchi_mum_baby.csv',encoding = 'utf-8',dtype =str)#婴儿信息
def f(x):
    if '0' in x:
        return '女'
    elif '1' in x :
        return '男'
    else:
        return '未知'
# 0代表女,1代表男,2代表未知
df2['性别'] = df2['gender'].apply(f)
df2.head(4)
#使用map函数
df2['性别'] = df2['gender'].map({'0':'女','1':'男','2':'未知'})
df2['user_id'].apply(lambda x: x.replace(x[1:3],'**')) #结合lambda替换
df2['birthday'].apply(lambda x: str(x)[0:4]) #提取年份
f1 = lambda x: str(x).strip() and str(x).replace(',',‘’)
farmer_loan['原价'] = farmer_loan['原价'].apply(f1)
farmer_loan['成交价'] = farmer_loan['成交价'].astype(float)
farmer_loan['ID'] = farmer_loan['用户ID'].apply(lambda x: x[0:3])
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值