Pandas是目前Python生态圈最常用的数据分析库,该库以Numpy为基础,增加了标签支持,整合了对数据集的读取、清洗、转换、分析、统计、绘图等一系列工作流程,能够高效地处理和分析结构化数据。
使用前一般需要先打上如下代码:
import numpy as np
import pandas as pd
from pandas import DataFrame , Series
Pandas提供了三种基本数据结构:
series:带标签的一堆数组
DataFrame:带标签的二堆数组(即表格)
Panel:带标签的二维数组(若干表格的叠加面板)
我们主要使用Serier和DataFrame。与Numpy数组相比,Pandas最重要的改进是增加了标签,可以实现自动的按索对齐运算。
一、序列Series
1.简介:Series 是带标签的一维数组,它由索引和值两部分组成。
values:一组数据(ndarray类型)
index:相关的数据索引标签
2.Series 创建
直接创建
import numpy as np
import pandas as pd
from pandas import DataFrame , Series
s1 = Series([10,20,30])#创建Series,默认整数索引
s2 = Series([10,20,30]),index=['a','b','c'] #创建并指定索引
利用列表、numpy、字典来创建
2.Series 访问
s2['a'] #按标签访问
s2[0] #按整数下标访问
s2['a':'c']#标签切片,3个数据
S2[0:2]#按整数索引切片,2个数据
3.Series 修改添加
s2['a'] = 100 #修改a标签对应的值
s2[d] = 200 #通过赋值创建新标签
4.标签自动对齐运算
Series具有标签,运算时自动对齐标签进行计算,这是Pandas相比Numpy的重要改进。s1的标签为['a','x','b'],s2的标签为['a','b','c'],执行s1+s2时,两看都有的'a','b'标签自动对齐,对应的数值相加,两者互不匹配的'c','x'标签相加后值为NaN。NaN(not a number)是Pandas中表示非数值或缺夫值的符号。
s1 = Series([1,2,3],index=list('abc'))
s2 = Series({'a':10,'b':20,'c':30}
s1+s2
5.values和index属性
s2.values #显示所有值
s2.index #显示所有索引标签
注意:标签不能单个修改,但是允许对标签一次性全部赋值修改
s2.index[0]='d'#报错,标签不能单个修改
s2.index=['d','d','e'] #允许对标签一次性全部赋值修改
6.常用属性和方法
s.size 返回数据个数(此为属性,调用时不需要括号)
s.count() 返回非空数据的个数
s.unique() 返回不重复的数据值
s.value_counts() 统计每个数值的出现次数
s.head(n) 只显示头部的n个数据
s.tail(n) 只显示尾部的n个数据
s.take([il,i2,……]) 按指定的索引下标取数据
二、数据框DataFrame
1.DataFrame是Pandas最重要的数据结构。教据框可视为由行和列构成的二维表格,每行或每列都可视为一个Series。DalaFrame既有行索引(index)又有列索引(column)
2.数据框保存为csv文件
df.to_csv('mobile.csv',encoding='GBK') #GBK也可写为CP936编码
!type mobile.csv #默认逗号分隔,显示数据文件内容
上例如不指定编码,Pandar保存时默认使用utf-8编码,Python文件编码默认和操作系统编码一致。当用!type命今显示文件内容时,Windows系统用GBK编码解析,中文将显示为乱码,所在涉及中文文件时应视编码情况指定encoding='GBK'或utf-8参数。
3.创建
数据框可视为二维表格,有index(行)和column(列)两个重要属性,在创建数据框时,可以指定index和columns
frame=DataFrame(np.arange(12).rehape(3.4),index=['a','b','c'],columns=['c1','c2','c3','c4']
4.访问数据
data = {'apple':[1100,1050,1200],'huawe':1250,1300,1328],'oppo':[800,850,750]}
df = DataFrame(data,index=['一月',‘二月’,'三月')]#index行标签
df['apple'] #访问一列
df.info() #显示列名及数据类型
5.loc[]、iloc[]访问
按列访问:访问列数据时使用obiect[列名]或object.列名的形式
df['c1'] #访问c1列,也可写为df.c1
df[['c1','c3']] #访问c1、c3两列,注意多个列名要放入[]
df[df.c1>3] #按条件访问,则示c1列大于三的行
df[(df.c1>3)&(df.c2>5)] #按条件访问,c1列>3且c2列>5
注:df[切片] #按行索引切片
[]内的逻辑运算符要使用&(与)、|(或)~(非),不能使用Python的and、or、not运算符,[]内的逻辑表达式要用小括号括起来。
6.loc和iloc存取器
访问行或块数据时常用loc[]和iloc[]存取器,loc基于标签,iloc基于整数索引下标。loc[]中可以是[单行],[单行,单列],[行切片,列切片]等多种表达形式。取出的是Series或DataFrame.
loc[]和iloc[]格式示例表
df.loc['a'] 访问行标签''’对应的一行
df.iloc[0] 访问第0行
df.loc['a':'c'] 访问行标签a’到'c',共3行(含结尾)
df,iloc[0:2] 访问第0,1行,共2行(不含结尾)
df:iloc[[0,2]] 访问第0,2两行
df.iloc[0,2] 访问第0行,第2列处的单个数据
df.iloc[:,1] 访问第1列
df.iloc[:,[0,2]] 访问第0,2列数据
df.iloc[:2,:2] 访问第0~1行和第0~1列交叉处的数据块
7.at[]和iat[]取数器
取单个数据可使用at[]或iat[]。at[]基于标签,iat基于整数索引,格式均为[单行,单列],取出的是单个数据而下是Series.
df.iat[1,2] #基于整数索引,行和列都是从零开始编号
8.query查询取数
数据框支持query()查询,语法类似数据库中的SQL查询,根据列名条件进行数据筛选,复制返回新的DataFrame对象。
df.query('c1>2') #查询c1>c2的数据