Python的pandas模块的运用之数据处理

pandas之数据处理

  • 一、数据导入与导出
    • (一)、csv文件的数据导入与导出
    • (二)、txt和excel文件的数据导入与导出
  • 二、数据清洗
    • (一)、数据排序
    • (二)、去除重复数据
    • (三)、缺失与空格数据处理
  • 三、数据转换
    • (一)、数值与字符的转换
    • (二)、字符转时间
  • 四、数据抽取
    • (一)、字段拆分
    • (二)、记录抽取
    • (三)、随机抽样
  • 五、数据合并
    • (一)、记录合并和字段合并
    • (二)、字段匹配
  • 六、数据计算

一、数据导入与导出

(一)、csv文件的数据导入与导出

import pandas
# 将1.csv数据导入到data变量中
data = pandas.read_csv(
	# 文件路径
	'D:/1.csv',
	# 设置engine参数,使得路径中含义中文不会报错
	engine='python',
	# 设置编码格式
	encoding='utf8'
)

# 数据导出
# 定义数据框
data1 = pandas.DataFrame(
	data={
		'name':['a', 'b']
		'age':[12, 23]
	}
)
# 调用to_csv函数,将数据保存到data_csv文件中
data1.to_csv(
	'D:/data.csv',
	# 这边设置不输出索引
	index=False
)

(二)、txt和excel文件的数据导入与导出

这边使用read_table函数,具体参数这边就提了,有兴趣百度哈。

import pandas
# txt文件数据导入
data = pandas.read_table(
	'D:/1.txt',
	engine='python',
	# 设置列名列表
	names=['name', 'age']
	# 设置逗号为分隔符
	sep=',',
	encoding='utf8'
)

#excel文件数据导入
data1 = pandas_excel(
	'D:/1.xlsx',
	# 要读取的sheet名,默认为第一个
	sheet_name='data'
)

#数据导出,与csv文件类似,这边不做说明

二、数据清洗

(一)、数据排序

其中data为数据框,如何定义上文有,利用sort_value函数进行排序。

sortData = data.sort_value(
	# 要排序的列
	by=['年龄','性别'],
	# 设置升序(True)或者降序
	ascending=[True, False]
)

(二)、去除重复数据

其中data为数据框,如何定义上文有,利用duplicated函数进行查找重复数据,然后利用drop_duplicates()函数进行删除重复数据

# 查找重复数据,
dIndex = data.duplicated()
# 其中默认全部列都重复的数据返回值为True.
return dIndex
# 查找特定的列重复值
d1Index = data.duplicated(['性别'])
# 输出重复的数据
data[data.duplicated()]

# 删除重复的数据
# 直接删除重复值,默认根据所有的列进行删除
cData = data.drop_duplicates()

(三)、缺失与空格数据处理

其中data为数据框,如何定义上文有,利用fillna()函数进行数据补齐,也可以利用dropna函数直接删除缺失值。
利用str.strip()函数可以去除字符串头尾的空格,当然也可以设置value参数值对其他字符进行删除

# 利用消费的平均值(mean()函数)来补齐缺失值
data['消费'] = data.消费.fillna(data.消费.mean())

# 直接删除缺失值
cData = data.dropna()

# 去除字符串前后的空格
data['name'].str.strip()

三、数据转换

(一)、数值与字符的转换

其中data为数据框,如何定义上文有

# 将电话号码列转化为字符串
data['电话号码']=data.电话号码.astype(str)
# 字符串转数值
data['数值型电话号码'] =data.电话号码.astype(float)

(二)、字符转时间

其中data为数据框,如何定义上文有

# 把注册时间这一列添加转为时间类型的数据
# 然后把时间类型的数据添加到数据框中的‘时间’列表
data['时间'] = pandas.to_datetime(
	data.注册时间,
	format='%Y/%m/%d'
)

# 时间格式化,上面的出来会出现小时,而我们只要年月
data['年月'] = data.时间.dt.strftime('%Y-%m')

四、数据抽取

其中data为数据框,如何定义上文有

(一)、字段拆分

# 1、按位置拆分
# 先转换为字符串格式,然后取出前3位
data['tel']=data['tel'].astype(str)
data['tel'].str.slice(0,3)

# 2、按分隔符进行拆分
# 第一个参数为分隔符,第二个参数为分割为几列(1表示2列),第三个参数是否展开数据框
data['name'].str.split(' ',1,True)

# 3、按时间属性抽取
# 先转换为时间数据类型
data['时间'] = pandas.to_datetime(
	data.注册时间,
	format='%Y%m%d %H:%M:%S'
)
# 抽取时间的各种属性,增加到对应的列
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

(二)、记录抽取

# 1、根据关键字抽取记录
# 第一个参数为要参考的字段,na参数为填充方式,在过滤的情况下,要设置为False
fData = data[data.title.str.contains('电台', na=False)]

# 2、空值抽取
# 抽取商品标题为空值的数据记录
fData = data[data.title.isnull()]

# 3、数值范围抽取
# 单条件比较运算
data[data.comments>10000]
# 范围抽取,True表示包括边界
data[data.comments.between(1000,10000,True)]

# 4、时间范围抽取
data['ptime'] = pandas.to_datetime(
	data.ptime,
	format='%Y-%m-%d'
)
from datetime import datetime
# 定义时间点
dt1=datetime(
	year=2019,
	month=1,
	day=1
)
dt1=datetime(
	year=2020,
	month=8,
	day=11
)
# 获取介于dt1和dt2之间的数据
fData = data[(data.ptime>=dt1)&(data.ptime<=dt2)]

# 组合条件抽取
# ~为取反
data[~data.title.str.contains('电台',na=False)]
data[
	(data.comments >=1000)&(data.comments <=10000)
	& data.title.str.contains('电台',na=False)
]

(三)、随机抽样

# 按个数抽样
data.sample(n=3)
# 按百分比抽样
data.samle(frac=0.2)
# 是否放回抽样,
data.sample(n=3,True)

五、数据合并

(一)、记录合并和字段合并

其中data1、data2、data3为要合并的数据框

# 记录合并
data= pandas.concat([data1, data2, data3])

# 也可以指定列进行合并
data = pandas.concat(
	[
		data1[['id', 'comments']],
		data2[['comments', 'title']],
		data3[['id','title']]
	]
)

# 字段合并
# 转为字符串
data.data.astype(str)
# 合并字段
tel = data['band']+data['area']+data['num']

(二)、字段匹配

使用pandas.merge(left, right, left_on, right_on, how=‘inner’)进行操作,具体参数说明如下

参数 说明
left 左边的数据框
right 右边的数据框
left_on 连接中使用左边数据库的列名
right_on 连接中使用右边数据库的列名
how=‘inner’ 连接方式, 默认为inner,还有left,right,outer
# 内连接
itemPrices = pandas.merge(
	data1,
	data2,
	left_on='id',
	right_on='id',
	how='inner'
)

六、数据计算

简单的数值计算,包括四则运算

# 时间计算

data['时间'] = pandas.to_datetime(
	data.注册时间,
	format'%Y%m%d'
)
from datetime import datetime
data['注册时间'] = datetime.now() - data['时间']
# 只保留年月日
data['注册时间'] =data['注册天数'].dt.days

数据标准化
0-1标准就是x*=(x-min)/(max-min)

# round()第一个参数为要四舍五入的数据,第二个参数为要保留的位数
data['消费标准化']= round(
	(data.消费-data.消费.min()/
	(data.消费.max() - data.消费.min())
	,2

数据的分组。利用pandas.cut函数来完成,其参数说明如下

参数 说明
x 数据框的列,Series
bins 用于指定分组的列表
right 分组区间的右边界是否关闭,默认关闭
labels 分组自定义标签。可以不自定义
bins = [0, 20, 40, 60, 80, 100, 120]
cLabels = ['0到20','20到40','40到60','60到80','80到100','100到120']
data['cut'] = pandas.cut(
	data.cost, bins,
	right=False,
	labels =cLabels
)

你可能感兴趣的:(python)