Pandas 数据处理,数据清洗详解


Posted in Python onJuly 10, 2018

如下所示:

# -*-coding:utf-8-*-

from pandas import DataFrame
import pandas as pd
import numpy as np

"""
 获取行列数据
"""
df = DataFrame(np.random.rand(4, 5), columns=['A', 'B', 'C', 'D', 'E'])
print df
print

df['col_sum'] = df.apply(lambda x: x.sum(), axis=1) # 横向求和,axis=1表示横向
df.loc['row_sum'] = df.apply(lambda x: x.sum()) # loc获取一整列的数据,对一列数据进行求和

print df
print

dd = pd.DataFrame(np.arange(0, 60, 2).reshape(10, 3), columns=list('abc'))

# loc获取一整列的数据
print dd
print
print dd.loc[0:len(dd), 'a']
print
print dd.loc[0:3, ['a', 'b']]
print
print dd.loc[[1, 5], ['b', 'c']]
print '--------------------------------------'

# iloc获取某个位置的元素,或者某个区域的元素
print dd.iloc[1, 1]
print dd.iloc[0:3, [0, 1]]
print dd.iloc[[0, 3, 5], 0:2]
print '--------------------------------------'

"""
 去重函数 drop_duplicates()
"""
from pandas import Series, DataFrame

data = DataFrame({'k': [1, 1, 2, 2]})
print data
print type(data) # <class 'pandas.core.frame.DataFrame'>
print

isduplicates = data.duplicated() # duplicated()判断是否是重复的项
print isduplicates
print type(isduplicates) # <class 'pandas.core.series.Series'>
print

data = data.drop_duplicates() # drop_duplicates()移除重复的项
print data
print type(data) # <class 'pandas.core.frame.DataFrame'>
print '-------------------------------------------------'

"""
 Pandas.DataFrame 读取、合并、修改列数据、新增列、分组、分组数据计算
"""
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from datetime import timedelta, datetime
from dateutil.parser import parse

"""
 读写csv文件
"""
# 读取csv文件
df = pd.read_csv('data_english.csv', encoding='gbk')
# print df
print type(df) # <class 'pandas.core.frame.DataFrame'>
print df.columns # 所有列的标签
print df.index # 所有行的标签
print df.book_id # 选择某一列,可以使用df.book_id ,也可以使用df['book_id']
print type(df.book_id) # <class 'pandas.core.series.Series'>
print np.array(df.book_id) # 将Series转换为numpy的darray格式
print '---------------------------------------------------------'

# 写入csv文件
# df.to_csv('dat.csv', index=False, encoding='gbk') # index=False表示不把index写入文件

"""
 行列的选取
"""
print df.read_name # 选择一列
print df[:3] # 选择前3行
print df.loc[:, ('read_num', 'read_name')] # df.loc[行标签,列标签]
print df.iloc[2, 4] # df.iloc[行位置,列位置]
print df.ix[2, 4] # df.ix[行位置或行标签,列位置或列标签]

# bool判断
print df[df.read_name == u'山问萍'].head() # 获取符合条件的行列
print df[(df.read_name == u'山问萍') & (df.book == u'植物生理学实验教程')] # 多个条件
print '----------------------------------------------'

"""
 两个df相merge
"""
# pd.concat([df1, df2]) # 两个df的column都一样,index不重复(增加列)
# pd.concat([df1, df2], axis=1) # 两个df的index都一样,column不重复(增加行)

"""
 增加列,删除列,重命名某一列
"""
# df['new_col'] = xxx # 直接增加一列,加到最后一列
# df.insert[1, 'new_col'] # 使用df.insert 插入一列,可以设置这一列的位置
# del df['one_col'] # 直接使用del进行删除,删除某一列
# df = df.rename(columns={'old_name': 'new_name'}) # 重命名某一列
# df = df.rename(columns={'old_name': 'new_name'}, inplace=True)
# print '--------------------------------------------------------'

"""
 apply(): 对dataframe的内容进行批量处理,比循环更快
 map(),
 agg():对分组的结果再分别进行不同的操作
"""

"""
 数据合并
"""
import numpy as np
import pandas as pd

data1 = pd.DataFrame({'level': ['a', 'b', 'c', 'd'], 'number': [1, 3, 5, 7]})
data2 = pd.DataFrame({'level': ['a', 'b', 'c', 'e'], 'number': [2, 3, 4, 5]})
print data1
print data2
print pd.merge(data1, data2, on='level') # 合并,内连接

data3 = pd.DataFrame({'level1': ['a', 'b', 'c', 'd'], 'number': [1, 3, 5, 7]})
data4 = pd.DataFrame({'level2': ['a', 'b', 'c', 'e'], 'number': [2, 3, 4, 5]})
print pd.merge(data3, data4, left_on='level1', right_on='level2')
print pd.merge(data3, data4, left_on='level1', right_on='level2', how='left')
print '----------------------------------------'
"""
 merge参数说明:
  left和right:两个不同的DataFrame
  how:合并的方式-->inner内连接,right右连接,left左连接,outer外连接,默认为inner
  on:用于连接的列索引名称,必须存在于两个DataFrame对象中
  left_on:
  right_on:
  left_index:
  right_index:
  sort:默认为True,将合并的数据进行排序
  suffixes:当列名相同时,合并后,自动添加后缀名称,默认为(_x, _y)
  copy:默认为True,复制数据结构
  indicator:
"""

"""
 重叠数据合并
"""
data3 = pd.DataFrame({'level': ['a', 'b', 'c', 'd'], 'number1': [1, 3, 5, np.nan]})
data4 = pd.DataFrame({'level': ['a', 'b', 'c', 'e'], 'number2': [2, np.nan, 4, 5]})
print data3.combine_first(data4) # 相同标签下的内容优先显示data3的内容,如果某个数据缺失,就用另外一个数据补上

"""
 数据重塑和轴向旋转
 数据重塑:reshape()
 轴向旋转:unstack(),stack()
"""
data = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['a', 'b', 'c', 'd'], index=['wang', 'li', 'zhang'])
print data
print data.unstack() # 轴向旋转
print '---------------------------------'

"""
 数据转换
"""
data = pd.DataFrame({'a': [1, 3, 3, 4], 'b': [1, 3, 3, 5]})
print data
print data.duplicated() # 判断是否重复行
print data.drop_duplicates() # 去除重复行

"""
 替换值
"""
data = pd.DataFrame({'a': [1, 3, 3, 4], 'b': [1, 3, 3, 5]})
print data.replace(1, 2) # 凡是数据1,全部替换成数据2
print data.replace([1, 4], np.nan) # 凡是数据1,4,全部替换成np.nan

"""
 数据分段
"""
data = [11, 15, 18, 20, 25, 26, 27, 24]
bins = [15, 20, 25]
print data
print pd.cut(data, bins)

以上这篇Pandas 数据处理,数据清洗详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用sorted函数对列表进行排序的方法
Apr 04 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
Python遍历目录中的所有文件的方法
Jul 08 Python
Python学习思维导图(必看篇)
Jun 26 Python
深入理解Python中的super()方法
Nov 20 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
python生成1行四列全2矩阵的方法
Aug 04 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
python 利用zmail库发送邮件
Sep 11 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 #Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 #Python
Python Dataframe 指定多列去重、求差集的方法
Jul 10 #Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 #Python
python3中函数参数的四种简单用法
Jul 09 #Python
python3学习之Splash的安装与实例教程
Jul 09 #Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 #Python
You might like
PHP取得一个类的属性和方法的实现代码
2011/05/22 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
详解javascript事件冒泡
2016/01/09 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
js禁止表单重复提交
2017/08/29 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
Python函数中定义参数的四种方式
2014/11/30 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
基于python实现简单日历
2018/07/28 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
爱游人:Travelliker
2017/09/05 全球购物
如何唤起类中的一个方法
2013/11/29 面试题
网吧消防安全责任书
2014/07/29 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
同学会邀请函模板
2015/01/30 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python