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

数据清洗之数据转换

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 [ ]:

原文地址:https://www.cnblogs.com/xingnie/p/12264498.html

时间: 2024-11-17 03:34:46

数据清洗之数据转换 日期格式、字符串、高阶函数的相关文章

python字符串反转 高阶函数 @property与sorted(八)

(1)字符串反转 1倒序输出 s = 'abcde' print(s[::-1]) #输出: 'edcba' 2 列表reverse()操作 s = 'abcde' lt = list(s) lt.reverse() print(''.join(lt)) #输出: 'edcba' 3 二分法交换位置 s = 'abcde' lt = list(s) for i in range(len(l) // 2): lt[i], lt[-(i+1)] = lt[-(i+1)], lt[i] print('

高阶函数复习:利用reduce和map把字符串转为数字

复习高阶函数的时候,有一道题想了半天解不出来.看了下别人的解法,发现学习编程,思维真的很重要. 习题: 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456 解法及思路说明: from functools import reduce def str2float(s): s = s.split('.') #以小数点为分隔符,把字符串分为两部分 def f1(x,y): #函数1,小数点之前的数用这个函数处理 return x * 10 + y

Java时间戳与日期格式字符串的互转

上代码: import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { /** * 时间戳转换成日期格式字符串 * @param seconds 精确到秒的字符串 * @param formatStr * @return */ public static String timeStamp2Date(String seconds,String format) { if(seconds == nul

函数-内置函数,匿名函数,嵌套函数,高阶函数,序列化

函数简单说明 # 函数即"变量" # 高阶函数 # a.把一个函数名当做实参传给另一个函数(在不修改被装饰函数的源代码的情况下,为其添加功能) # b.返回值中包含函数名(不修改函数的调用方式) ''' import time def bar(): print("in the bar!") time.sleep(2) def foo(func): start_time = time.time() func() #根据内存地址,执行代码 stop_time = tim

JavaScript 高阶函数 + generator生成器

map/reduce map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow(x) { return x * x; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81] map()传入的参数是pow,即函数对象本身. 你可能会想,不需要map(),写

高阶函数:map()/reduce()

Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文"MapReduce: Simplified Data Processing on Large Clusters",你就能大概明白map/reduce的概念. 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. 举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个li

python之6-2高阶函数

1. map函数 map(函数A,字符串或者列表) map函数的意思是将函数A依次作用到字符串的每个字符或者列表的每个元素. 例如: map(lambda x: x*x,[1,2]) [1, 4] 这里lambda是匿名函数,匿名函数的作用就是不用定义函数名. 格式:lambda 参数: exp 关于map函数,其实用的并不是太多,因为可以用列表解析来写,例如上面的等价于[x*x for x in range(1,3)] 2. reduce函数 reduce(函数A,字符串或者列表) reduc

16. Python 高阶函数、匿名函数

1.      高阶函数 高阶函数就是把函数当成参数传递的一种函数 举例: def add(x, y, f): return f(x) + f(y) print (add(-8, 11, abs)) 返回结果: 19 ① map() 函数 map() 函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 举例: lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] def f(x): return x * x map(

Python函数,匿名函数,高阶函数,内置函数——08

函数 当一个函数的返回值是另一个函数的函数名时,只是返回该函数的内存地址,该函数的作用域不会发生改变. name = 'winsodm' def test(): name = 'xl' print('in the test') def test1(): print('in the test1') return test res = test1() res() #结果是: name = 'xl' 'in the test' #这里返回的test 之后运行 还是输入test里的变量name的值,而不