《Python3爬虫、数据清洗和可视化实战》
零一 韩要宾 黄园园 著
第九章:pandas数据清理
9.1 数据读写、选择、整理和描述
Pandas是用来数据清洗的Python库,由于它的依赖库很多,所以建议还是下载anaconda,里面内置了相关库。
9.1.1 读取CSV数据
df = pd.read_csv(“csv_path”,delimiter=”,”,encoding=””)
参数说明:
“csv_path”,CSV文件路径;delimiter=”,”:分隔方式;encoding=””:文件编码格式。
9.1.2 向CSV写入数据
df.to_csv(“csv_path”,columns=[‘value1’,’value2’],index=False,header=True)
参数说明:
“csv_path”文件路径,columns=[‘value1’,’value2’]:需要写入的数据,index=False:将DataFrame保存成文件,并忽略索引信息(True为默认值,保存索引信息),header=True
查看表中的描述性统计信息
df.describe()
9.2 数据分组,分割,合并和变形
9.2.1数据分组
Groupby:
Means = df[“成交量”].groupby(df[“成交量”],df[“卖家”]).mean()
>>>Means
size方法:返回一个含有各个分组大小的Series
9.2.2数据分割
df1=df[30:40][[‘位置’,’卖家’]]
#df1中包含第30-39行数据
9.2.3数据合并
Pandas包含三种内置的合并数据集方法:
Pandas.merge | 根据一个或多个键将多个DataFrame连接起来 |
---|---|
Pandas.concat | 可以沿着一个轴将多个对象堆叠起来 |
Combine_first | 可以将重叠部分合并,用以填充缺失部分 |
Pandas.merge(df1,df2,on=” Column_name”,how=”inner/outer/left”,left_index=True,right_index=true)
参数说明:
On:合并相同列名的列,默认会选择相同列名。
How:包含inner(内连接),outer(外连接),left(左连接),right(右连接)
内连接 | 两个表中相同数据合并输出 |
---|---|
外连接 | 两个表中全部数据合并输出 |
左连接 | 以左边表(df1)为基础,添加df1中没有的行属性(从df2中找新数据) |
左连接 | 以右边表(df2)为基础,添加df2中没有的行属性(从df1中找新数据) |
left_index:将左边表(df1)索引作为连接键
right_index:将右边表(df2)索引作为连接键(df1.join(df2):join方法同样可以将索引作为连接键使用)
Pandas.concat([s1,s2,s3])
#沿着s1,s2,s3的轴合并在一起
9.2.4 数据变形
Data.stack()方法:将Data的列转换为行
Data.unstack()方法:将Data的行转换为列
9.3 缺失值、异常值和重复值处理
9.3.1 缺失值处理
查看缺失值:df1.isnull()
删除行:df1.dropna()
代替缺失值:df1.fillna(“代替值”)
df1.fillna(method=”pad/bfill”,limit=1)
#pad使用前一个同属性的数据代替空值;fill使用后一个同属性的数据代替空值;limit表示每列代替空值的数目
9.3.3 移除重复值
判断是否存在重复值:df1.duplicated()
删除重复数据:df1.drop_duplicates()
9.4 时序数据处理
9.4.1 日期/时间数据转换
import time
>>>Time.time() #输出系统时间戳
>>>time.localtime() #输出系统时间
>>>time.mktime(time.localtime()) #将系统时间转化为时间戳
9.4.2 时序数据基础操作
import datetime
import numpy as np
import pandas as pd
#periods表示输出几天(从2019-05-17开始计算);freq表示按照什么单位生成序列(M/D/H:月/天/小时)
Pd.date_range(“2019-05-17”,periods=31,freq=”M/D/H”)
("Life's a mixed bag, no matter who you are."--《About Time》
)