Pandas数据清洗与转换:缺失值处理、去重及哑变量生成详解
本文系统讲解Pandas库中数据清洗与转换的核心指令。涵盖缺失值检测与处理,包括使用dropna过滤、fillna填充及thresh参数控制;详解数据去重方法duplicated与drop_duplicates;介绍replace替换、rename重命名及get_dummies生成One-hot编码的技巧,助力高效数据预处理。
Pandas数据清洗与转换指南
前言部分简要引入主题。
利用pandas库对获取的数据执行清洗操作,旨在回顾并巩固相关技术知识。
数据清洗核心方法
1 数据清洗章节概述。
缺失值检测与表示
1.1 处理缺失数据小节介绍。
数值型数据包含缺失值(NAN)与非缺失值两类。检测缺失值可利用Python中pandas库Series类对象的isnull方法实现。
import pandas as pd
import numpy as np
string_data = pd.Series(['Benzema', 'Messi', np.nan, 'Ronaldo'])
string_data.isnull()
表示缺失值时,除了使用np.nan,还可以采用None进行标识。
string_data = None
缺失值过滤策略
1.2 滤除缺失数据章节开始。
1.2.1 针对Series对象的处理方法。
调用dropna方法可直接过滤掉Series中的NAN数据。
from numpy import nan as NA
import pandas as pd
data = pd.Series([1,NA,4.5,NA,5])
data.dropna()
另一种策略是利用布尔值索引来筛选并剔除NAN数据。
data[data.notnull()]
1.2.2 针对DataFrame对象的处理方法。
对DataFrame应用dropna()方法时,默认会移除包含任何NAN数据的整行记录。
data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA],
[NA, NA, NA], [NA, 6.5, 3.]])
data
data.dropna()
若仅希望删除那些所有字段均为NAN的行,可通过配置dropna()方法的how参数来实现精准控制。
data.dropna(how = 'all')
当操作对象转换为列时,相关代码示例如下所示。
data[4] = NA
data
data.dropna(axis=1, how = 'all')
若需保留部分含有非NAN数据的有效行,可设置thresh参数进行筛选。
df = pd.DataFrame(np.random.randn(7, 3))
df.iloc[:4, 1] = NA
df.iloc[:2, 2] = NA
df
df.dropna(thresh = 2)
设定thresh = n,表示仅保留至少包含n个非NA值的行。
缺失值填充技巧
1.3 填充缺失数据章节介绍。
使用fillna(n)方法,可将NA值替换为指定的n值。
df = pd.DataFrame(np.random.randn(7, 3))
df.fillna(0)
若填充格式采用字典形式,例如fillna({0:n1,1:n2}),则会将第0列的NA填充为n1,第1列的NA填充为n2。
df.fillna({{1 : 0.2,2 : 0.3}})
直接对df调用NA值填充操作,会直接修改原df对象,无需重新命名新变量。
df.fillna(0, inplace = True)
数据转换与预处理
2 数据转换章节概述。
重复数据移除
2.1 移除重复数据小节介绍。
data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two'],
'k2': [1, 1, 2, 3, 3, 4, 4]})
data.duplicated()
该方法返回每一行的重复状态标识,非重复行标记为False,重复行标记为True。
若需去除重复行,可参考以下代码实现。
data.drop_duplicates()
当操作对象指定为特定列时,需在duplicated方法中明确指定相应参数。
data['k3'] = range(7)
data.duplicated(['k1'])
此操作返回k1列中重复出现的元素信息。
对于drop_duplicates()方法,其默认行为是去除重复数据中靠后的记录。例如,若序号0和1的数据重复,该方法将删除index为1的行。若希望保留前者而删除后者,只需指定参数last即可实现。
data.drop_duplicates(['k1'], keep = 'last')
映射与替换操作
2.2 与映射相结合的操作介绍。
此处展示map函数的具体使用方式。
list(map(lambda x : 2 * x , range(10)))
2.3 替换操作章节介绍。
使用replace方法,该方法接收两个参数:前者为被替换的数值,后者为替换后的数值。参数格式支持列表或字典形式。
data = pd.Series([1., -999., 2., -999., -1000., 3.])
data.replace(-999.0, np.nan) #替换单个值
data.replace([-999.0, -1000.0], np.nan) #用一个值替换多个值
data.replace([-999.0, -1000.0],[np.nan, 0]) # 用不同值替换不同值
data.replace({-999.0 : 0, -1000.0 : np.nan}) # 格式为字典
数据重命名与版本控制
2.4 创建数据的修改版章节介绍。
rename方法能够生成数据的一个修改版本,而无需直接修改原始数据。
data.rename(index=str.title, columns=str.upper)
此外,还可以采用字典格式,分别对index和columns进行重命名操作。
data.rename(index = {'OHIO': 'INDIANA'}, columns = {'three': 'peekaboo'})
此类重命名操作默认不修改原数据。若需直接改变data对象,可如上例所示,通过设置参数inplace = True来实现。
data.rename(index = {'OHIO': 'INDIANA'}, columns = {'three': 'peekaboo'}, inplace = True)
data
执行上述操作后,data即被成功修改。
哑变量生成与One-hot编码
2.5 计算指标与哑变量章节介绍。
该功能常用于机器学习领域,用于将定类数据转化为One-hot编码,从而消除数值间直接比较大小的问题,将df中的object对象进行转换。
df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'],
'data1': range(6)})
pd.get_dummies(df['key']) # 分解了key 列,分开了三个属性
若希望在分离出的属性前添加前缀,可设定prefix参数。完成后可将结果与原始数据合并。
dummies = pd.get_dummies(df['key'], prefix = 'key')
df_with_dummies = df['data1'].join(dummies)
df_with_dummies
至此,关于详解Pandas处理缺失值指令大全的介绍已完毕。更多相关Pandas处理缺失值内容,欢迎搜索本站历史文章或继续浏览后续相关文章,感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













