Python数据分析基础——数据预处理方法笔记(持续更新)

一、数据探索

1.1 查看表总体信息

data.dtypes # 展示各字段及其数据类型

data.info() # 比dtypes多一列,还可展示各字段数据量

在这里插入图片描述

1.2 查看表细节信息

# 查看数据框形状大小
data.shape
# 查看表的所有列名
data.columns
# 查看表的索引
data.index
# 查看各字段数据大小、均值、标准差、最小值、上四分位点、中间值、下四分位点、最大值
data.describe()

二、数据清洗

2.1 重复值处理

  1. 探索数据框中的重复值情况;
  2. 根据实际情况决定是否删除;
  3. 删除方式:删除完全重复的数据或指定情况进行部分删除。
'————第一步:探索重复数据————'
# 探索完全相同的行数据
data.duplicated().sum()

'————第二步:处理缺失数据(删除)————'
# 删除所有字段完全相同的数据
data.drop_duplicates()

# 若有n条重复数据,保留最后一条重复数据
data.drop_duplicates(keep='last')

# 按照指定字段去重
# 单列
data.drop_duplicates(subset='列名1',inplace=True)
# 多列
data.drop_duplicates(subset=['列名1','列名2'],inplace=True) # inplace=True在原数据上删除

2.2 缺失值处理

  1. 探索数据框中的缺失值情况;
  2. 根据实际情况决定如何处理:不处理、删除、填补、插值
'————第一步:探索缺失数据————'
# 统计每一列字段缺失值的个数
data.isnull().sum()
# 统计每列字段缺失比例
data.apply(lambda x: str(round(sum(x.isnull())/len(x)*100,2))+'%' , axis= 0)


'————第二步:处理缺失数据————'
'————删除————'
# 默认删除只要存在一个缺失值的行
data.dropna() 

# 删除所有元素都是缺失值的列
data.dropna(axis=1,how='all') # any:只要有缺失,就删除这一行

# 指定字段删除缺失值
data.dropna(subset=['字段名'],axis=0)

'————填补————'
# 指定值填补
data['列名'] = data['列名'].fillna('填补的数据')
# 均值填补
data['列名'] = data['列名'].fillna(data['列名'].mean())
# 中位数填补
data['列名'] = data['列名'].fillna(data['列名'].median())
# 众数填补
data['列名'] = data['列名'].fillna(data['列名'].mode()[0])
# 指定多列同时填补
data.fillna(value = {'第一列_众数' :某列.mode ()[0],'第二列_均值':某列.mean()})

# 用后一个数据填补
data.fillna(method='backfill')
# 用前一个数据填补
data.fillna(method='pad')

'————插值————'
# 线性等距插值:用缺失值上下值的平均值填充
data['列名'] = data['列名'].fillna(data['列名'].interpolate())

# 连续插值:选用前一个值来填充
data['列名'] = data['列名'].fillna(data['列名'].interpolate(method="pad"))

2.3 异常值处理

  1. 异常值处理没有固定流程,对于每个项目来说异常值的判定标准都不一样,有可能是时间数据2022-11-1变成了–,也有可能是表中年龄存在200岁等;
  2. 简单查看:①可通过Excel的–数据筛选–快速查看是否有异常值;②python中的value_counts();③箱线图;
  3. 处理:筛选出异常值后按实际情况删除or替换即可。
'————探索异常数据————'
# 展现数据情况
data['列名'].value_counts()

# 箱线图
import matplotlib.pyplot as plt
plt.boxplot(data['列名'])
plt.show()

2.4 提取字符串

  1. 只提取中文内容
data['列名'] = data['列名'].str.replace(r'[^\u4e00-\u9fa5]','')
  1. replace提取目标字符串(将非目标字符全部替换为空)
    适合字符串中含有复杂符号的情况,如:'[ ] \
# 将不要的字符替换为空
data['列名'] = data['列名'].apply(lambda x:x.replace('不要的字符',''))

# 若一次替换完成不了,可多次replace
data['列名'] = data['列名'].apply(lambda x:x.replace('不要的字符','').replace('不要的字符',''))
  1. str提取目标字符串(适合简单情况,字符串位置可数)
# 单个
data['列名'] = data['列名'].str[7]
# 多个(切片)
data['列名'] = data['列名'].str[0:2]

2.5 数据离散化

2.6 数据标准化

2.7 数据整合

三、数据类型的转换

3.1 时间类型数据处理

  1. Pandas中使用to_datetime()方法将文本格式转换为日期格式
  2. 对于时间差数据,可以使用timedelta函数将其转换为指定时间单位的数值
'————转换为时间数据————'
# 最简单转换
data['列名'] = pd.to_datetime(data['列名'])
# format设置时间格式
data['列名'] = pd.to_datetime(data['列名'], format='%Y%m%d')

3.2 字符串类型数据处理

  1. 以下字符串函数只能对字符型变量进行使用
  2. 通过str方法访问相关属性
    |函数|说明 |
    |–|–|
    | replace | 替换字符串 |
    | lower | 所有字母都转为小写 |
    | upper | 所有字母都转为大写|
    | split | 返回字符串中的单词列表 |
    | strip | 删除前导和后置空格 |
    | join | 可连接字符串 |
# 用逗号分隔此字段数据,用于文本处理
data['列名'].str.split(',')
# 计算字符串长度
data['列名'].str.len()
# 显示前3行
data['列名'].head(3)
# 转换为float数据
data['列名'] = data['列名'].astype(float)

四、特征构造

4.1 时间特征

4.1.1 提取年月日等

  1. 当数据类型为datetime64时,可用dt方法提取出时间特征:年月日等
data['年'] = data['日期'].dt.year
data['月'] = data['日期'].dt.month
data['日'] = data['日期'].dt.day
data['季度'] = data['日期'].dt.quarter
data['星期几'] = data['日期'].dt.dayofweek
data['周次'] = data['日期'].dt.week
data['时'] = data['日期'].dt.hour
data['分'] = data['日期'].dt.minute
data['秒'] = data['日期'].dt.second

4.1.2 构造时间

  1. 构造时间,利用datetime模块中的timedelta类。timedelta类一定要结合date类的对象 或 datetime类的对象使用。也就是说,一定是基于这两个类的对象,进行时间的加、减。
    (1)date类主要是用于处理年、月、日的,因此对该对象进行时间的加、减,主要是做“日(天数)”的加减;
    (2)datetime类主要是用于处理年、月、日、时、分、秒、毫秒、微妙的,因此对该对象进行时间的加、减,主要做“日(天数)”、“”、“”、“秒”、“毫秒”、“微秒”、的加减;
    (3)time类对象不支持。
'————date用法————'
# 定义date对象
day = date(2022,11,12)

# 昨天
yesterday = day + timedelta(days=-1)
# 明天
tomorrow = day + timedelta(days=1)

print('昨天:',yesterday)
print('明天:',tomorrow)
————————————————————————————————
Output:
昨天: 2022-11-11
明天: 2022-11-13
'————datetime用法————'
# 定义datetime对象
day = datetime(2022,11,12,23,59,59)

# 昨天
yesterday = day + timedelta(days=-1)
# 明天
tomorrow = day + timedelta(days=1)
# 上一个小时
last_hour = day + timedelta(hours=-1)
# 下一个小时
next_hour = day + timedelta(hours=1)
# 上一秒
last_m = day + timedelta(seconds=-1)
# 下一秒
next_m = day + timedelta(seconds=1)

print('昨天:',yesterday)
print('明天:',tomorrow)
print('上一个小时:',last_hour)
print('下一个小时:',next_hour)
print('上一秒:',last_m)
print('下一秒:',next_m)
————————————————————————————————
Output:
昨天: 2022-11-11 23:59:59
明天: 2022-11-13 23:59:59
上一个小时: 2022-11-12 22:59:59
下一个小时: 2022-11-13 00:59:59
上一秒: 2022-11-12 23:59:58
下一秒: 2022-11-13 00:00:00

4.1.3 计算时间间隔

  1. 计算两个日期的时间间隔,基于date类型、datetime类型数据。
# 提取间隔天数
(tomorrow - yesterday).days
————————————————————————————————
Output:
2

4.1.4 判断是否为:工作日/节假日/调休日/星期几

调用chinese_calendar库中的is_workday、is_holiday、is_in_lieu模块,判断目标日期是否为工作日、节假日、调休日。返回的是一个布尔值。

import datetime
from chinese_calendar import is_workday # 判断是否为工作日
from chinese_calendar import is_holiday # 判断是否为节假日
from chinese_calendar import is_in_lieu # 判断是否为调休日

day = datetime(2022,11,12,23,59,59) # 11月12日是星期六

print(is_workday(day))
print(is_holiday(day))
print(is_in_lieu(day))
————————————————————————————————
Output:
False
True
False

date和datetime类型都可用weekday方法判断目标日期是星期几。0~6分别对应星期一至星期天

# 11月12日是星期六
day = datetime(2022,11,12,23,59,59)

day.weekday()
————————————————————————————————
Output:
5
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pandas是一个Python库,用于数据处理和分析。在数据分析中,预处理是非常重要的一步,因为它可以帮助我们清洗和转换数据,使其更适合进行分析。Pandas提供了一些强大的预处理功能,包括数据清洗、数据转换、数据重塑和数据合并等。在使用Pandas进行数据分析时,预处理是必不可少的一步。 ### 回答2: 在数据分析中,数据预处理是一个必要的过程。它的主要目的是清洗数据,准备数据,以便后续分析。在Python中,pandas是一种广泛使用的数据处理库。pandas可以通过其高效的数据结构和操作方法来清洗和处理数据。在本文中,将介绍pandas预处理的一些常见技术。 一、读取数据pandas中,使用read_csv()函数读取CSV格式的数据文件,read_excel()函数读取Excel格式的数据文件。它们都有很多选项,可以根据具体文件的格式进行设置。 二、查看数据pandas中,使用以下函数来查看数据: 1. head() - 显示数据框的前几行; 2. tail() - 显示数据框的后几行; 3. columns - 显示数据框的列名; 4. shape - 显示数据框的行列数; 5. info() - 显示数据框的基本信息,包括每列的名称、非空值数量和数据类型。 三、数据清洗 在数据清洗中,有以下一些常见的技术: 1. 删除重复行:使用drop_duplicates()函数; 2. 替换空值:使用fillna()函数; 3. 删除空值:使用dropna()函数; 4. 更改数据类型:使用astype()函数。 四、数据准备 在数据准备中,有以下一些常见的技术: 1. 数据合并:使用merge()函数; 2. 数据筛选:使用loc()函数或者iloc()函数; 3. 数据分组:使用groupby()函数; 4. 数据排序:使用sort_values()函数。 五、数据分析数据分析中,有以下一些常见的技术: 1. 数据聚合:使用agg()函数; 2. 统计描述:使用describe()函数; 3. 数据可视化:使用matplotlib或者seaborn库。 综上所述,pandas预处理数据分析中必不可少的一步。通过使用pandas提供的函数和方法,可以方便地清理和处理数据,使其更容易被分析。 ### 回答3: PandasPython中最强大的数据处理库之一,它提供了DataFrame和Series这两种数据结构,可以快速便捷地处理数据。在数据分析过程中,我们往往需要先对数据进行预处理,以便后续的分析。Pandas提供了一系列的方法和函数,可以帮助我们进行数据预处理。 首先,在进行数据分析之前,我们需要了解自己所面对的数据类型和数据结构。Pandas中的DataFrame结构就是类似于表格的结构,每一行代表一个样本,每一列代表一个属性。Series则是一维的数组结构。通过pandas.read_csv(),我们可以读取CSV格式的数据,并转化为DataFrame结构。 接下来,我们要对数据进行一些基本的处理,例如数据清洗、数据去重、缺失值处理、异常值处理等。在数据清洗过程中,我们往往需要对数据进行一些特殊的处理,例如字符串的分割、合并、替换等操作,Pandas提供了一系列能够对文本进行操作的函数。在数据去重方面,我们可以使用drop_duplicates()函数,它可以去除DataFrame中的重复记录。在处理缺失值时,Pandas提供了一系列的函数,如fillna()函数、dropna()函数,可以方便地将NaN值变为其他有意义的值,或者删除缺失值的行或列。在异常值处理方面,我们可以使用isoutlier()函数来找到数据中的异常值,并进行处理。 在数据预处理完成后,我们可以对数据进行一些统计分析,例如计算小计、计算总计、分位数、极差、方差、标准差等统计指标。我们可以使用describe()函数来获得数据的统计描述,还可以使用groupby()函数来对数据分组,使用agg()函数对每组进行计算统计指标。此外,我们还可以对数据进行排序、丢弃、合并等操作。 总之,Pandas是一个非常强大的Python库,可以轻松处理数据预处理数据处理方面的任务。Pandas作为数据分析数据处理的基础库,使用熟练后可以在数据分析中发挥更大的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值