一.数据清洗与准备

1.缺失值

NaN(np.nan): 对数值型数据,浮点值NaN(not a number)

NA(not available)

None 均为缺失值,通过data.isnull()检测,反方法:data.notnull()

过滤(删除缺失值)

newdata = data.dropna()

等价于 data[data.notnull()]

默认删除含有缺失值的整行

可选参数:

how=‘all’:当一行全是缺失值才删除该行,否则不删除

axis=1:删除列

thresh=n:保留含有n个观测值的行

补全

newdata = data.fillna(value)

:将缺失值替换为value

为不同列的NA设置不同的填充值:传入字典data.fillna({列名:value,…})

常用可选参数(详见文档字符串):

inplace=True:修改原对象而不返回新对象;

method=:插值方法,(比如’ffill’:用前面的值填补后面所有的缺失值),

与limit=n搭配,设置前向或后向填充时最大填充范围;

axis=1:需要填充的轴

可以用数据的平均值或中位数填充NA:data.fillna(data.mean())

2.数据转换

去重

df.duplicated(): 是否有重复值,返回同大小的TF结构

newdata = df.drop_duplicates([‘col1’]):基于某些列删除重复值,默认保留第一条重复行

常用可选参数(详见文档字符串):

列名列表:基于某些列去重

keep=‘last’:保留最后一条重复行

series的逐元素转换:map

se.map(映射:函数或字典):每个元素传入到函数或字典中进行转换

字典就是映射!字典就是映射!字典就是映射!

# 创建肉类的数据框

data = pd.DataFrame({'food':['bacon','beef','Bacon','nova lox'],'weight':[4,3,12,6]})

print(data)

# 添加一列表示每种食物的动物肉来源

# 创建一个食物与动物肉的映射关系

meat_to_animal = {'bacon':'pig','beef':'cow','nova lox':'salmon'} # 培根是猪肉...

# 先统一数据的大小写se.str.lower(),再逐一映射,下面两条语句等价:

data['animal'] = data['food'].str.lower().map(meat_to_animal) # 传入字典进行映射

data['animal'] = data['food'].map(lambda x: meat_to_animal[x.lower()]) # 传入函数进行映射

data

替换特定值replace

data.replace(old,new)

: 将旧值替换为新值,df全表搜索

可以多对一,多对多,传入列表,按顺序对应,或者传入字典,例如:

data.replace([old1,old2,…],[new1])

data.replace([old1,old2,…],[new1,new2,…])

data.replace({old1:new1,old2:new2,…})

重命名索引

对索引对象直接赋值:如

data.index = range(len(data))

,直接修改了原对象

更全的方法 : data.rename(index=map1,columns=map2,inplace=False)

映射包括函数与字典。

# 每个行索引值-4,截至时间列修改列名为date,直接修改原对象

data.rename(index=lambda x:x-4,

columns={'截至时间(24h)':'date'},

inplace=True)

如果传入的不是映射,是直接的数据,会报错:xxx object is not callable.不可调用

分组,划分区间

连续值的离散化,返回Categorical对象,包含了类别标识和标签

cgc = pd.cut(x=data,bins=分点列表或分组个数)

cgc = pd.qcut(data,bins=分位数列表或分位数个数)

常用可选参数(详见文档字符串):

right=True: 区间默认左开右闭,False变为左闭右开

labels=None: 自定义分组名,传入列表或者数组

precision=3:小数位数

随机抽样

newdata = data.sample(n,replace=True)

: 默认无放回随机抽样,抽n个

replace=False:有放回

随机重排序

a = np.random.permutation(n) : 将0~n-1重排序

newdata = df.take(a) or df.iloc(a) # 将顺序应用于索引即为重排序

哑变量

newdata = pd.get_dummies(df[‘col1’])

:将df的一列因子型(字符或Categorical对象)设置为多个哑变量,变成多列01,因子有n个水平则变为n列。

可选参数

prefix=‘a’:为新生成的列名加上前缀’a’以区分

例如:对数据分组后设为哑变量:

pd.get_dummies(pd.cut(data,bins))

3.字符串操作

内建字符串方法

方法

描述

string.split(分隔符)

拆分分隔字符串

.strip()

去除字符串两端空格及换行符

.rstrip()/.lstrip()

去除字符串右端或左端空白

分隔符.join(字符串列表或元组)

以连接符连接各字符串

.count(子串)

子串出现的次数

.replace(old,new)

将字符串中的old替换为new,常用于传入空串来实现删除效果

.endswith(后缀)/.startwith(前缀)

字符串是否以后缀结尾或前缀开头

.lower()/.upper()

大小写转换

子串 in 字符串

字符串中是否含有某子串

.index(子串)/.find(子串)

字符串中是否含有某子串,返回第一次出现的头位置,index找不到报错,find返回-1

string = 'a,b, guido '

l = [x.strip() for x in string.split(',')] # ['a', 'b', 'guido']

':'.join(l) # 'a:b:guido'

向量化字符串函数

1.Series.str属性:就是把每个元素作为字符串去逐元素应用字符串的方法

se.str.contains(string or regex)

:每个元素是否包含string或正则表达式

通过se.str属性可以调用任意正则表达式的方法应用于每一个元素,se.str就是将se变为每一个元素都是str,然后逐元素应用正则表达式。

data['food'].str.findall(regex) # 对每个元素查找匹配项

data['food'].str.get(0) # 得到每个元素的第一个字符

data['food'].str[:2] # 对每个元素进行统一切片

所有内建字符串方法都可以通过se.str.内建方法()对每个元素统一应用。具体方法详见P215。

二.数据合并与重塑

1. 数据库风格的DataFrame连接

pd.merge(df1,df2,on=,how= )

:不管内外连接,只要多对一,少的都自动重复

可选参数:

on=: 按哪个列连接,两个df的列名需要一样,否则指定

left_on=: (df1),right_on=:(df2)

how=: ‘outer’:外连接,两个df的键的并集,没有就引入NA,使用dropna后结果就是内连接

‘inner’:内连接,键的交集

‘left’:按照左边df1的键进行连接

‘right’:按照右边df2的键进行连接

suffixes:重叠的列名后面加上后缀以示区分

sort=True:默认排序,大数据集上可禁用该功能以获得更好的性能

indicator:添加一列_merge,指示每一行的来源

按行索引合并,等同于几个数据框横向拼接,默认多去少补NA

df1.join(df2,how=‘inner’):

df1.join([df2,df3,…],how=)

2. 轴向拼接

对NumPy数组:

np.concatnate([arr1,arr2],axis=)

对df:

pd.concat([data1,data2],axis=0,join=‘outer’) 按行纵向拼接,默认索引并集

可选参数:

ignore_index:True:忽略索引直接拼,顺着产生新索引

3. 重塑和透视

1.有关多重索引

newdata = data.stack() 所有列变成一列因子型,列名是因子,df变成多重索引的se.

data = newdata.unstack() 还原

长数据(冗余数据)透视为宽数据(正常数据)

长格式:列少,列有冗余,主键多于一个,共同决定一行

newdata = pivot(‘col1’,‘col2’,‘col3’)

col1:该列的值作为行索引,成为唯一主键

col2:该列是因子型,因子的水平成为新列

col3:可选的数字列填充

等价于先用set_index创建分层索引,然后调用unstack

\iff

newdata = data.set_index([‘col1’,‘col2’]).unstack(‘col3’)

宽透视为长

反操作,将多列合成一列,长度更长,产生冗余

df = pd.DataFrame({'key':['foo','bar','baz'],

'a':[1,2,3],

'b':[4,5,6],

'c':[7,8,9]})

df

melted = pd.melt(df,id_vars=['key']) # 必须指明分组指标id_vars,是主键的第一部分,是不变的列

melted # variable是新产生的列,是主键的第二部分

还原

data = melted.pivot('key','variable','value')

data

由于key并不是原来的索引,所以将数据回移一列

data.reset_index()

三.数据聚合与分组-groupby-详见第10章

python的数据清理_Python数据清理,清洗相关推荐

  1. 如何用python进行数据预处理_Python数据预处理

    数据预处理是指在对数据进行数据挖掘之前,先对原始数据进行必要的清洗.集成.转换.离散和规约等一系列的处理工作,已达到挖掘算法进行知识获取研究所要求的最低规范和标准.通常数据预处理包括:数据清洗.数据集 ...

  2. python matplotlib画数据分布图_Python数据可视化之matplotlib

    数据可视化能让人们更直观的传递数据所要表达的信息.Python 中有两个专用于可视化的库,matplotlib 和 seaborn ,本文将介绍matplotlib. Matplotlib:基于Pyt ...

  3. python数据输出_python数据输出

    下面的是我的code, 但是最后的结果全部都是others,有哪位大神能帮忙看产生输出的最简单方法是使用print语句,可以通过用逗号分隔零个或多个表达式.这个函数传递表达式转换为一个字符串,如下结果 ...

  4. python 豆瓣评论数据分析_Python数据可视化分析--豆瓣电影Top250

    Python数据分析–豆瓣电影Top250 利用Python爬取豆瓣电影TOP250并进行数据分析,对于众多爬虫爱好者,应该并不陌生.很多人都会以此作为第一个练手的小项目.当然这也多亏了豆瓣的包容,没 ...

  5. python图形绘制星空图_Python数据可视化教程:基于Plotly的动态可视化绘图

    1. plotly 介绍 Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图, 下面我们以jupyter ...

  6. python 手动释放内存_Python手动清理内存

    写程序这方面,自己不是科班出身,本科时唯一的C语言课也没有好好听讲.导致后来写代码的时候十分不规范,也缺失了许多细节,日常遇到的自己给自己挖的坑还是有必要记录一下,方便以后复盘. 就像现在,前脚写完的 ...

  7. python支付宝蚂蚁森林_Python数据可视化-支付宝蚂蚁森林能量收取记录

    支付宝蚂蚁森林模块最早从2016年推出,题主最开始从支付宝集福活动开始接触.期间懒懒散散收过一些能量,但是相比朋友圈动辄几十几百公斤的能量值,我的能量值只有20Kg,想种棵胡杨连零头都不够.所以,本着 ...

  8. python 访问网页 重定向_Python数据网络采集5--处理Javascript和重定向

    Python数据网络采集5--处理Javascript和重定向 到目前为止,我们和网站服务器通信的唯一方式,就是发出HTTP请求获取页面.有些网页,我们不需要单独请求,就可以和网络服务器交互(收发信息 ...

  9. python默认数据类型转换_Python 数据类型转换

    1.指定变量类型和转换 有时您可能想在变量上指定类型. 这可以通过铸造来完成. Python是一种面向对象的语言,因此它使用类来定义数据类型,包括其原始类型. int() 将其他类型转换为整形: 1) ...

最新文章

  1. 【PC工具】200416最终百度网盘——最终下载方法及注意事项,代理是什么
  2. 【JavaScript】实现将从Excel中复制的数据粘贴到WEB页面Grid中
  3. IAR切BANK--程序中的使用
  4. np读取csv文件_pythonpandas读写csv数据
  5. java Flink使用addSink方法保存流到mysql数据库中
  6. 【maven】聚合工程
  7. 网络安全等级保护通用解决方案参考模板
  8. 中科院分词系统整理笔记
  9. retainAll用法
  10. 味美多网址导航php,味多美网址导航源码程序按来路自动显示 2010.0329
  11. Jikes 研究虚拟机(RVM)一 设计和实现问题
  12. 吴枫 python小课账号_吴的解释|吴的意思|汉典“吴”字的基本解释
  13. android应用 数量,谷歌Android应用数量超40万 免费应用占总数2/3
  14. Java 图片处理 给原有图片填充颜色满足需求大小 背景透明
  15. 盘一盘 这些深度学习框架够你用一年
  16. 数字孪生工厂丨智慧工厂孪生驾驶舱,实现智能化精益生产管理
  17. Lora模型训练-koya SS GUi
  18. Symantec Ghost 8.3 DOS 版 下载
  19. linux网络编程 ppt,LINUX网络编程.ppt
  20. 图的深度优先搜索和广度优先搜索(邻接表) - Java实现

热门文章

  1. linux下将目录授权给其他用户的步骤
  2. 对于数据库中表示状态或类型字段表示方法的思考
  3. Hadoop日记Day7---HDFS的WED端口
  4. JBPM使用assignHandler进行用户分派思路
  5. 从外资银行上看国内银行的差距
  6. mybatis configuration的内容必须匹配问题
  7. redis的一些操作命令
  8. 端口转发与代理工具 内网代理 内网反弹代理
  9. golang 数据库 连接与连接池
  10. docker 镜像名 tag 为none 的解决方案