注:小蚊子团队KEN主讲,共分6章。第一章,python与数据分析概况;第二章,python安装和使用;第三章,数据准备; 第四章 数据处理;第五章 数据分析;第六章,数据可视化

4.1、数据导入
1)、通过文件导入
CSV

语法:read_csv(file,encoding)

from pandas import read_csvdf = read_csv('D://dataloop//python_work//DataAnalysis//4.1//1.csv'
)
df

EXCEL

语法:read_excel(fileName,sheetname,names)

from pandas import read_excel;df = read_excel('D://dataloop//python_work//DataAnalysis//4.1//3.xlsx', sheetname='data'
)   

TXT

语法:read_table(file,names=[列名1,列名2,...],sep="",encoding,...)

from pandas import read_tabledf = read_table('D://dataloop//python_work//DataAnalysis//4.1//2.txt', names=['age', 'name'], sep=','
)
df      

中文问题
   encoding='UTF-8',

engine='python'

df = read_table(filePath, sep=',', encoding='UTF-8', engine='python'
)

2)、通过数据库导入
MySQL
Access
SQL Server
等等
4.2数据导出
导出文本文件
csv
to_csv函数语法:to_csv(filePath,sep=",",index=True,header=Ture)

默认sep=",",index=True,header=Ture

from pandas import DataFrame;df = DataFrame({'age': [21, 22, 23], 'name': ['KEN', 'John', 'JIMI']
})df.to_csv("D://dataloop//python_work//DataAnalysis//4.2//df.csv"
)df.to_csv("D://dataloop//python_work//DataAnalysis//4.2//df.csv", index=False
)

4.3重复值处理
把数据结构中,行相同的数据只保留一行

函数语法:drop_duplicates()

from pandas import read_csvdf = read_csv('D://dataloop//python_work//DataAnalysis//4.3//data.csv')df#找出行重复的位置
dIndex = df.duplicated()#根据某些列,找出重复的位置
dIndex = df.duplicated('id')
dIndex = df.duplicated(['id', 'key'])#根据返回值,把重复数据提取出来
df[dIndex]#直接删除重复值
#默认根据所有的列,进行删除
newDF = df.drop_duplicates()
#当然也可以指定某一列,进行重复值处理
newDF = df.drop_duplicates('id')

4.4缺失值处理
1)、缺失值得产生:
有些信息暂时无法获取
有些信息被遗漏或者错误处理了
2)、缺失值处理方式:
a、数据补齐
如平均值填充
b、删除对应缺失行
避免缺失值对整体数据的影响
数据量较少时谨慎使用
c、不处理
有时候缺失数据是正常的,如单身人士的配偶
3)、缺失值处理函数:
去除数据结构中值为空的数据

函数语法:dropna()

from pandas import read_csvdf = read_csv('D://dataloop//python_work//DataAnalysis//4.4//data.csv'
)df = read_csv('D://dataloop//python_work//DataAnalysis//4.4//data2.csv',na_values=['a','b']
)#找出空值的位置
isNA = df.isnull()#获取出空值所在的行
df[isNA.any(axis=1)]df[isNA[['key']].any(axis=1)]df[isNA[['key', 'value']].any(axis=1)]df.fillna('未知')#直接删除空值
newDF = df.dropna()

4.5空格值处理
清除字符型数据左右的空格

语法:strip()

from pandas import read_csvdf = read_csv('D://dataloop//python_work//DataAnalysis\\4.5\\data.csv'
)newName = df['name'].str.lstrip()newName = df['name'].str.rstrip()newName = df['name'].str.strip()df['name'] = newName

4.6字段抽取
是根据已知列数据的开始和结束位置,抽取出新的列

函数:slice(start,stop)

from pandas import read_csvdf = read_csv('D://dataloop//python_work//DataAnalysis\\4.6\\data.csv'
)df['tel'] = df['tel'].astype(str)#运营商
bands = df['tel'].str.slice(0, 3)
#地区
areas = df['tel'].str.slice(3, 7)
#号码段
nums = df['tel'].str.slice(7, 11)#赋值回去
df['bands'] = bands
df['areas'] = areas
df['nums'] = nums

4.7字段拆分
是指按照固定的字段,拆分已有的字符集
分割函数:split(sep,n,expand=False)
sep--用于分割的字符串,n--分割为几列(1为2列,2为3列,...),expand--是否展开为数据框,默认为False
       返回值:
       如果expand为True,则返回为DataFrame;

如果expand为False,则返回为Series。

from pandas import read_csvdf = read_csv('D://dataloop//python_work//DataAnalysis//4.7//data.csv'
)newDF = df['name'].str.split(' ', 1, True)newDF.columns = ['band', 'name']

4.8记录抽取
是指根据一定的条件,对数据进行抽取
记录抽取函数:dataframe[condition]
        condition--过滤的条件
        返回值:DataFrame
过滤条件
比较运算:>,<,>=
子主题 2
范围运算:between(left,right)
空值匹配:pandas.isnull(column)
字符匹配:str.contains(patten,na=False)

逻辑运算:与&,或|,取反not

import pandasdf = pandas.read_csv('D://dataloop//python_work//DataAnalysis\\4.8\\data.csv', sep="|"
)#单条件,返回符合条件的数据框
df[df.comments>10000]#多条件
df[df.comments.between(1000, 10000)]#过滤空值所在行
df[pandas.isnull(df.title)]#根据关键字过滤
df[df.title.str.contains('台电', na=False)]#~为取反
df[~df.title.str.contains('台电', na=False)]#组合逻辑条件
df[(df.comments>=1000) & (df.comments<=10000)]

4.9随机抽样
是指随机从数据中按照一定的行数或者比例抽取数据
函数:DataFrame.sample(n,frac,replace=False)
n--按个数抽样,frac--按百分比抽样,replace--是否可放回抽样,默认False不可放回
        返回值:抽样后的数据框
seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
apply(func [, args [, kwargs ]]) 函数用于当函数参数已经存在于一个元组或字典中时,间接地调用函数。args是一个包含将要提供给函数的按位置传递的参数的元组。如果省略了args,任 何参数都不会被传递,kwargs是一个包含关键字参数的字典。

分层抽样法,也叫类型抽样法。就是将总体单位按其属性特征分成若干类型或层,然后在类型或层中随机抽取样本单位。

# -*- coding: utf-8 -*-
import numpy
import pandasdata = pandas.read_csv('D://dataloop//python_work//DataAnalysis\\4.9\\data.csv'
)#设置随机种子
numpy.random.seed(seed=2)#按照个数抽样
data.sample(n=10)
#按照百分比抽样
data.sample(frac=0.02)
#是否可放回抽样,
#replace=True,可放回,
#replace=False,不可放回
data.sample(n=10, replace=True)#典型抽样,分层抽样
gbr = data.groupby("class")gbr.groupstypicalNDict = {1: 2, 2: 4, 3: 6
}def typicalSampling(group, typicalNDict):name = group.namen = typicalNDict[name]return group.sample(n=n)result = data.groupby('class', group_keys=False
).apply(typicalSampling, typicalNDict)typicalFracDict = {1: 0.2, 2: 0.4, 3: 0.6
}def typicalSampling(group, typicalFracDict):name = group.namefrac = typicalFracDict[name]return group.sample(frac=frac)result = data.groupby('class', group_keys=False
).apply(typicalSampling, typicalFracDict)

4.10记录合并
是指将两个结构相同的数据框合并成一个数据框
函数:concat([dataFrame1,dataFrame2,...])

返回值:dataFrame

import pandas
from pandas import read_csvdata1 = read_csv('D://dataloop//python_work//DataAnalysis\\4.10\\data1.csv', sep="|"
)
data2 = read_csv('D://dataloop//python_work//DataAnalysis\\4.10\\data2.csv', sep="|"
)
data3 = read_csv('D://dataloop//python_work//DataAnalysis\\4.10\\data3.csv', sep="|"
)
data = pandas.concat([data1, data2, data3])data = pandas.concat([data1[[0, 1]], data2[[1, 2]], data3[[0, 2]]
])

4.11字段合并
是指将将同一个数据框中的不同列进行合并,形成新的列
方法:x=x1+x2+x3+...
        注意:x1位数据列1,必须为字符型

返回值:Series

from pandas import read_csvdf = read_csv('D://dataloop//python_work//DataAnalysis\\4.11\\data.csv', sep=" ", names=['band', 'area', 'num']
)df = df.astype(str)tel = df['band'] + df['area'] + df['num']df['tel'] = tel

4.12字段匹配
根据各表共有的关键字段,把各表所需的记录一一对应起来
函数:merge(x,y,left_on,right_on)
                   x--第一个数据框,y--第二个数据框
                   left_on:第一个数据框用于匹配的列
                   right_on:第二个数据框用于匹配的列
                   注:left_on和right_on类型要相同

返回值:DataFrame

import pandasitems = pandas.read_csv('D:\\PDA\\4.12\\data1.csv', sep='|', names=['id', 'comments', 'title']
)prices = pandas.read_csv('D:\\PDA\\4.12\\data2.csv', sep='|', names=['id', 'oldPrice', 'nowPrice']
)#默认只是保留连接上的部分
itemPrices = pandas.merge(items, prices, left_on='id', right_on='id'
)#即使连接不上,也保留左边没连上的部分
itemPrices = pandas.merge(items, prices, left_on='id', right_on='id',how='left'
)#即使连接不上,也保留右边没连上的部分
itemPrices = pandas.merge(items, prices, left_on='id', right_on='id',how='right'
)#即使连接不上,也保留所有没连上的部分
itemPrices = pandas.merge(items, prices, left_on='id', right_on='id',how='outer'
)

4.13简单计算
是指通过对已有字段进行加减乘除等运算,得出新的字段

data['total'] = data.price*data.num

import pandasdata = pandas.read_csv('D:\\PDA\\4.13\\data.csv', sep="|"
)data['total'] = data.price*data.num#注意,用点的方式,虽然可以访问,但是并没有组合进数据框中
data = pandas.read_csv('D:\\PDA\\4.13\\data.csv', sep="|"
)data.total = data.price*data.num

4.14数据标准化
是指将数据按比例缩放,使之落入到特定区间
消除不同数据间量当的影响
主要用于
综合评价分析
聚类分析
因子分析
主成分分析

0-1标准化公式:X*=(x-min)/(max-min)

import pandasdata = pandas.read_csv('D:\\PDA\\4.14\\data.csv'
)data['scale'] = round((data.score-data.score.min())/(data.score.max()-data.score.min()), 2
)

4.15数组分组
是根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间进行研究,以揭示其内在的联系和规律性
函数:cut(series,bins,right=True,labels=NULL)
                  series--需要分组的数据,bins--分组的划分数组
                  right--分组的时候,右边是否闭合

labels--分组的自定义标签,可以不自定义

import pandasdata = pandas.read_csv('D:\\PDA\\4.15\\data.csv', sep='|'
)bins = [min(data.cost)-1, 20, 40, 60, 80, 100, max(data.cost)+1
]data['cut'] = pandas.cut(data.cost, bins
)data['cut'] = pandas.cut(data.cost, bins, right=False
)labels = ['20以下', '20到40', '40到60', '60到80', '80到100', '100以上'
]data['cut'] = pandas.cut(data.cost, bins, right=False, labels=labels
)

4.16时间处理
1)、时间转换
时间转换,指将字符型的时间格式数据转换成时间型数据的过程
转换函数:datatime=pandas.to_datatime(dataString,format)
%Y--年份,%m--月份,%d--日期,%H--小时,%M--分钟,%S--秒。注意大小写。
data['时间'] = pandas.to_datetime(
                                                          data.注册时间, 
                                                           format='%Y/%m/%d'
                                                                       )
                data['格式化时间'] = data.时间.dt.strftime('%Y-%m-%d')
2)、时间格式化
是指将时间型数据,按照指定格式,转换为字符型数据
函数:dateTimeFormat = datetime.dt.strftime(format)
3)、时间属性抽取
日期抽取,是指从日期格式里面,抽取出需要的部分属性
语法:datatime.dt.property
                     second--1-60秒,minute--1-60分钟,hour--1-24小时,day--1-31天,month--1-12月,year--年份,weekday--1-7一周中的第几天
data['时间.年'] = data['时间'].dt.year
                data['时间.月'] = data['时间'].dt.month

data['时间.周'] = data['时间'].dt.weekday

import pandasdata = pandas.read_csv('D:\\PDA\\4.16\\data.csv', encoding='utf8'
)data['时间'] = pandas.to_datetime(data.注册时间, format='%Y/%m/%d'
)data['格式化时间'] = data.时间.dt.strftime('%Y-%m-%d')data['时间.年'] = data['时间'].dt.year
data['时间.月'] = data['时间'].dt.month
data['时间.周'] = data['时间'].dt.weekday
data['时间.日'] = data['时间'].dt.day
data['时间.时'] = data['时间'].dt.hour
data['时间.分'] = data['时间'].dt.minute
data['时间.秒'] = data['时间'].dt.second

4.17时间抽取
是指根据一定的条件,对时间格式的数据进行抽取
根据索引进行抽取:
               DataFrame.ix[start:end]
               DataFrame.ix[dataes]
         根据时间列进行抽取:

DataFrame[condition]

# -*- coding: utf-8 -*-
import pandasdata = pandas.read_csv('D:\\PDA\\4.17\\data.csv', encoding='utf8'
)dateparse = lambda dates: pandas.datetime.strptime(dates, '%Y%m%d'
)data = pandas.read_csv('D:\\PDA\\4.17\\data.csv', encoding='utf8',parse_dates=['date'],date_parser=dateparse,index_col='date'
)#根据索引进行抽取
import datetimedt1 = datetime.date(year=2016,month=2,day=1);
dt2 = datetime.date(year=2016,month=2,day=5);data.ix[dt1: dt2]data.ix[[dt1,dt2]]#根据时间列进行抽取
data = pandas.read_csv('D:\\PDA\\4.17\\data.csv', encoding='utf8',parse_dates=['date'],date_parser=dateparse,
)data[(data.date>=dt1) & (data.date<=dt2)]

4.18虚拟变量
也叫哑变量和离散特征编码,可用来表示分类变量、非数量因素可能产生的影响
1、离散特征的数值之间有大小的意义,如尺寸(L、XL、XXL)
        2、离散特征的取值之间没有大小的意义,如颜色
      1)、有大小意义的处理函数:pandas.Series.map(dict)
              2)、没有大小意义的处理函数:
pandas.get._dummies(data,prefix=None,prefix_sep='_',dummy_na=False,columns=None,drop_first=False)
            data--要处理的DataFram
            prefix--列名的前缀,在多个列有相同的离散项时使用
            prefix_sep--前缀和离散值的分隔符,默认为下划线
            dummy_na--是否把NA值作为一个离散值来处理,默认不处理
            columns--要处理的列名,如果不指定该列,那么默认处理所有列

drop_first--是否从备选项中删第一个,建模的时候为避免共线性使用

# -*- coding: utf-8 -*-
import pandasdata = pandas.read_csv('D://dataloop//python_work//DataAnalysis\\4.18\\data.csv', encoding='utf8'
)data['Education Level'].drop_duplicates()"""
博士后    Post-Doc
博士      Doctorate
硕士      Master's Degree
学士      Bachelor's Degree
副学士    Associate's Degree
专业院校  Some College
职业学校  Trade School
高中      High School
小学      Grade School
"""
educationLevelDict = {'Post-Doc': 9,'Doctorate': 8,'Master\'s Degree': 7,'Bachelor\'s Degree': 6,'Associate\'s Degree': 5,'Some College': 4,'Trade School': 3,'High School': 2,'Grade School': 1
}data['Education Level Map'] = data['Education Level'
].map(educationLevelDict
)data['Gender'].drop_duplicates()dummies = pandas.get_dummies(data, columns=['Gender'],prefix=['Gender'],prefix_sep="_",dummy_na=False,drop_first=False
)dummies['Gender'] = data['Gender']

第四章 ,数据处理--学习笔记相关推荐

  1. 控制系统仿真与CAD-薛定宇-第四章matlab学习笔记

    控制系统仿真与CAD-薛定宇-第四章matlab学习笔记 04-02传递函数模型 tfdata() 传递函数属性法 04-07典型系统连接计算 pretty 用法 04-08方框图简化 04-09代数 ...

  2. 第四章网络安全学习笔记(超详细)

    ---------------------------网络安全---------------------------- 万字长文,小编自己手打,如有勘误,敬请谅解! 网安笔记 ------------ ...

  3. 机器人导论(第四版)学习笔记——第二章

    机器人学导论(第四版)学习笔记--第二章 2. 空间描述和变换 2.1 引言 2.2 描述:位置.姿态与位姿 2.3 映射:从一个坐标系到另一个坐标系的变换 2.4 算子:平行,旋转和变换 2.5 总 ...

  4. 机器人导论(第四版)学习笔记——第四章

    机器人导论(第四版)学习笔记--第四章 4.1 引言 4.2 解的存在性 4.3 当n<6时操作臂子空间的描述 4.4 代数解法和几何解法 4.5 简化成多项式的代数解法 4.6 三轴相交的Pi ...

  5. 机器人导论(第四版)学习笔记——第一章

    机器人学导论(第四版)学习笔记--第一章 1. 概述 1.1 背景 1.2 操作臂力学和控制 1.3 符号 1. 概述 1.1 背景 工业自动化的发展带来了工业机器人的高速发展.本书聚焦机械臂的力学和 ...

  6. 机器人导论(第四版)学习笔记——第三章

    机器人导论(第四版)学习笔记--第三章 3 操作臂运动学 3.1 引言 3.2 连杆的描述 3.3 连杆连接的描述 3.4 连杆坐标系的定义 3.5 操作臂运动学 3.6 驱动空间.关节空间和笛卡尔空 ...

  7. 第四章 Cesium学习入门之加载离线影像图(tif)

    从0开始的Cesium 第一章 Cesium学习入门之搭建Vite+Vue3+Cesium开发环境 第二章 Cesium学习入门之搭建Cesium界面预览和小控件隐藏 第三章 Cesium学习入门之地 ...

  8. 《视觉SLAM十四讲》学习笔记:第5讲相机与图像

    <视觉SLAM十四讲>学习笔记:第5讲相机与图像 前言:本学习笔记将记录<视觉SLAM十四将>中一些重要的知识点,并对书中一些比较难的知识点添加上一些笔者个人的理解,以供笔者本 ...

  9. 2021-11-04 《计算机操作系统》(第四版)学习笔记:第四章

    文章目录 第四章 存储器管理 4.1 存储器的层次结构 4.1.1 多层结构的存储器系统 4.1.2 主存储器与寄存器 4.1.3 高速缓存和磁盘缓存 4.2 程序的装入和链接 4.2.1 地址以及映 ...

  10. 系统集成项目管理工程师(软考中级)—— 第十四章 项目成本管理 笔记分享

    前言 现在分享一些笔记给大家,希望能够帮助大家并顺利通过软考. 幕布地址:第十四章 项目成本管理 - 幕布 概述 成本概念 过程 1.制定成本管理计划口一制定了项目成本结构.估算.预算和控制的标准 2 ...

最新文章

  1. 【短视频SDK - 参数解析】对焦模式、裁剪模式、视频质量、分辨率、视频比例、帧率、关键帧间隔等参数解析...
  2. 【转】js实现复制到剪贴板功能,兼容所有浏览器
  3. JMeter接口测试通过企业微信API记录(二)创建审批接口并测试
  4. 为PHP安装Memcached扩展连接Memcached
  5. python 端口扫描
  6. unity双面显示在哪_双面屏努比亚Z20售3499起 4800万三摄+855Plus+4K电池
  7. cgi mysql数据库_Perl CGI中操作Mysql数据库
  8. 多线程中的死锁举例与分析(转)
  9. 这二十个问题,可能是你技术人生中已经或即将遭遇的痛点,怎么解?
  10. Tomcat环境配置 以及报错500的问题
  11. 惠普服务器关机自动重启,惠普电脑关机后自动重启怎么解决
  12. ORACLE RAC 11.2.0.4 一节点出现Suspending MMON slave action kewrmrfsa_ for 82800 seconds
  13. kthreaddk病毒查杀记录
  14. 以太网识别标准及接线标准、接线方法详解
  15. 电子入门基础知识之:多路选择开关(MUX)
  16. 黑苹果big sur版本安装安卓USB共享网络(100%成功)
  17. div css每行文字显示一半 同时文字字体重叠显示不全解决方法
  18. 医用耗材管理系统的模式的应用实践-盘谷
  19. Jquery+javaScrpt 130行代码实现打地鼠游戏
  20. 【刷题】华为笔试面试机考 [HJ17] - 坐标移动

热门文章

  1. VB浏览器html5网页,VB用IE浏览器打开网页源码,及用其它指定的浏览器打开网页源码。...
  2. 阿里巴巴全资收购中国网络配送平台饿了么
  3. ADO.NET中SqlParameter类的用法
  4. 【软件工程】-数据库设计说明书
  5. Cocos2D-x设计模式发掘之二:二段构建模式 -----------cocos2d-x3.0正式版本(7.22)
  6. 借助Google搜索找客户和邮箱
  7. SWFTOOLS PDF2SWF 参数详解(转)
  8. java浮动广告_浮动的广告代码
  9. CCF-CSP真题《202206-2—寻宝大冒险》思路+python满分题解
  10. 开源OA协同办公平台搭建教程丨模糊人员匹配功能配置说明