摘要:通过pandas的DataFrame,实现平面文件表格内容的读写,使用智能切片loc等获得子集信息。
一、概述
图1-1
Pandas是基于numpy的一套模块,所以也拥有numpy强大的分析功能。Pandas 包括1维Series和2维DataFrame2个主要的数据结构,因为经常处理表格数据的需要,本文重点了解下DataFrame的数据读写和切片部分内容。
示例文件sales1.csv内容:
图1-2
Pandas读取后,如果未明确指定索引名称,在dataframe中会自动新增数值的索引列(红色框部分):
图1-3
二、功能展示
首先,完成模块的导入:
import numpy as np
import pandas as pd
1、文件读写
Pandas可以轻松完成对平面文件(CSV和分隔)、Excel文件的数据读取和保存工作。
1.1、 读写编码
import numpy as npimport pandas as pd#################输入文件input_file = r'E:pytestsales1.csv'#输出文件output_file = r'E:pytestoutput.csv'#1、读取csv文件data = pd.read_csv(input_file)print(data)#2、修改,将sex列的girl修改为‘女’,其他修改为‘男’data['sex']=np.where(data['sex']=='girl','女','男')#3、写出,设置写出字符编码为'utf-8_sig',避免中文乱码# index=None表示不需要写出索引列data.to_csv(output_file,encoding='utf-8_sig',index=None)
1.2、 运行结果
图2-1
写出文件内容output.csv:
图2-2
2、熟悉文件的结构
2.1维度查看
Print(data.shape)
图2-3
2.2结构内容查看
打开的文件可能比较大,可以输出几行查看内容类型,以便更好的调试
print(data.head(3)):
name age sex
0 li1 10 girl
1 zhang1 11 boy
2 li2 12 girl
2.3、loc[row,col]行列切片
重点是体验对应的分隔符位置
1)row的连续格式“loc[row1:row2]”,表示row1到row2的连续行。
例如,print(data.loc[1:3])
图2-4
2)row的不连续格式“loc[[row1,row2]]”,表示row1,row2不连续行。
例如,print(data.loc[[1,3]])
图2-5
3)col的连续格式“loc[:,col1:col2]”,表示col1到col2的连续行;“:,”表示行标识,默认为所有行。
例如,print(data.loc[:,'A':'C']),进行列的连续输出,需要列名称具备连续标识才行;类似age:sex等不连续的是无法执行的,所以本示例专门将列标识更改为A、B、C的样式,来进行展示
图2-6
4)col的不连续格式“loc[:,col1:col2]”,表示col1到col2的连续行。
例如,print(data.loc[:,['name','sex']])
图2-7
图2-8
5)row和col共同作用下,行连续方式 “loc[row1:row2,[col1,col2]]”。
例如,获取索引为1-3连续行对应的name、sex的内容
print(data.loc[1:3,['name','sex']])
图2-9
6)row和col共同作用下,行不连续方式“loc[[row1,row2],[col1,col2]]”。
例如,获取索引为1/3不连续行对应的name、sex的内容
print(data.loc[[1,3],['name','sex']])
图2-10
7) row和col共同作用下,获取指定单元格内容“loc[row, col]”。
例如,获取索引为1对应的name的单元格内容
print(data.loc[1,'name'])
图2-11
8)iloc格式
iloc与loc一致,区分在于
A)、loc使用索引标签定位;
B)、iloc的数字不再是索引标签名称,而是数据所在的位置,从0开始。
例如
图2-12
9)ix格式
ix实现按索引标签和位置混合提取数据,也即ix是loc和iloc的混合体,但是已经被废弃,告警说明如下
图2-13
2.3变更数据格式
表格读取经常为字符型数据,转换为整数格式
data['age'] = data['age'].astype('int')
3、数据筛选
Pandas的筛选,实际就是将对应条件植入row,col的位置,实现对应的检索
图2-14
4、数据的分析
4.1、数据筛选
Pandas的真正强大,是因为继承自numpy,可以轻易实现数据的各项分析,例如通过条件筛选可以直接获取对应的数据平均值:
#筛选age大于12,sex为girl的行print(data.loc[((data['age']>12)&(data['sex']=='girl'))])#筛选age大于12,sex为girl的行,然后对满足条件的行的age求评价print(data.loc[((data['age']>12)&(data['sex']=='girl'))].age.mean())
图2-15
4.2、数据的分类汇总
Pandas的groupby可以轻易实现类似关系数据库的分类汇总。
例如,以sex进行分类汇总print(data.groupby('sex').count()):
图2-16
多字段的汇总
图2-17
三、总结
Pandas读取文件后,进行的子集切片是基本操作;pandas的强大,实际源于他的统计分析,可以通过pandas官网文档获取。