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模拟鼠标拖动操作的方法
Mar 11 Python
Python的Django框架中设置日期和字段可选的方法
Jul 17 Python
python中常用的九种预处理方法分享
Sep 11 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
django获取from表单multiple-select的value和id的方法
Jul 19 Python
python绘制无向图度分布曲线示例
Nov 22 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
python利用线程实现多任务
Sep 18 Python
PyQt5的QWebEngineView使用示例
Oct 20 Python
Python import模块的缓存问题解决方案
Jun 02 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 Python
Python读写yaml文件
Mar 20 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
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
php集成动态口令认证
2016/07/21 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
2020/08/20 Javascript
python单元测试unittest实例详解
2015/05/11 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
python数据封装json格式数据
2018/03/04 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
python字典与json转换的方法总结
2020/12/28 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
市场部专员岗位职责
2013/11/30 职场文书
高校辅导员推荐信范文
2013/12/25 职场文书
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
高三历史教学反思
2014/01/09 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
2014年化验员工作总结
2014/11/18 职场文书
小学运动会通讯稿
2015/07/18 职场文书
高考升学宴主持词
2019/06/21 职场文书
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记