Pandas的介绍
pandas是数据分析的一个核心框架,集成了数据结构化和数据清洗以及分析的一些方法。pandas在numpy的基础上新增了三个数据类型,Series、DataFrame、Panel。
Pandas的使用
#导入pandas和numpy包
import numpy as np
import pandas as pd
1、Series
Series是一种类似与一维数组的对象,由下面两个部分组成:
- values:一组数据(ndarray类型)
- index:相关的数据索引标签
#引入Series
from pandas import Series
(1)Series的创建(有两种方式):
第一:由列表或numpy数组创建,默认索引为0到N-1的整数型索引
#创建numpy数组
nd = np.array([1,2,3,4])
#创建Series
s = Series(nd) # 没有指定索引默认0~N-1
#由数组创建
s = Series([1,2,3,4,5],index=list("abcde"))
s
#索引值可以重复
s = Series([1,2,3,4,5,6],index=["A","A","B","B","A","C"])
s
注意: 由数组和列表创建Series是一个浅拷贝(只拷贝引用地址,不拷贝对象本身)
第二种:由字典创建
dic = {"语文":100,"数学":100,"英语":100,"理综":200}
s1 = Series(dic)
s1
注意:由字典创建Series是一个创建副本的过程(也叫深拷贝)
(2)Series的索引以及切片
1.使用显式索引切片
- 使用index中的元素作为索引值
- 使用.loc[](推荐),取值是闭区间
示例如下:
#通过索引值来查找数据
s["a"]或者s.loc["a"]
#从s中截取子series对象
s.loc[["a","b"]]
#为索引赋值,允许整体赋值但不允许单独赋值
s.index = list("abcdef")s
2.使用隐式索引:
- 使用整数作为索引值
- 使用.iloc[](推荐),取值是半开区间
示例如下:
#通过下标来查找数据
s.iloc[0]
#通过下标来查找多个下标的数据
s.iloc[[0,1]](3)pandas对于Series的一些其他使用
1、生成Series数据,当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况。
s = Series({"a":123,"b":345,"c":685},index=list("abcdef"))
或者:s.index = list("abcdnm")
s
可以使用pd.isnull(),pd.notnull(),或自带isnull(),notnull()函数检测缺失数据
如:pd.isnull(s)或者s.isnull()
s[s.notnull()]
# 一个Series如果索引和另外一个完全一致,值是bool类型,这个Series是可以作为另外一个Series的索引来查找对应元素的,查找的结果就是所有bool为True那些索引对应的元素
s1 = Series({"a":True,"b":False,"c":True,"d":False,"n":True,"m":True})
s[s1]
2、Series对象本身及其实例都有一个name属性,name属性是series在DataFrame中的表头信息
s.name = "python"
s
3、使用过滤条件
s = Series({"a":1,"b":2,"c":3})
a = s > 2#得出的是bool类型
nd[a]#得出的是满足条件的值,类型为数组
4、s1与s2分别为Series生成的数据
#找到n中值为空的数据,把105,106 保存起来
n = s1.add(s2)
n[n.isnull()]=105,106
n
2、DataFrame
(1)DataFrame的介绍
它是由Series构成的,一个类似于表格的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成。它可以将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
- 行索引:index
它是由Series构成的,一个类似于表格的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成。它可以将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
- 行索引:index
- 列索引:columns
- 列索引:columns
- 值:values(numpy的二维数组
- 值:values(numpy的二维数组
(2)DataFrame的创建
最常用的方法是使用一个字典来创建。DataFrame以字典的键作为每一列的名称,以字典的值(一个数组)作为每一列的值。此外,DataFrame会自动加上每一行的索引(和Series一样)。同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。
#导入
DataFrame
from pandas import DataFrame
dic = {#创建字典
"语文":[120,130,140,110,110,100],
"数学":[130,110,100,100,100,120],
"外语":[120,130,123,125,112,143],
"综合":[230,240,254,234,100,100]
}
#指定索引abcd,
如果不指定索引,默认是把当前行的位置序列做为索引
#DataFrame属性包括:values(值)、columns(列索引)、index(行索引)、shape(形状)
df = DataFrame(dic,index=list("abcde"))
df
df.values# 得到的是一个二维数组
df.index #得到的是 index索引对象也就是行名
df.index = list("ABCDEF") # index只能整体赋值不能单独赋值
df.columns #得到 index对象也就是列名
df2 = DataFrame(dic,columns=["姓名","语文","数学","外语","综合"])
df2#columns不能单独赋值只能整体赋值
nd = np.random.randint(0,150,size=(4,4))#创建4行4列的矩阵
df3 = DataFrame(nd,index=list("abcd"),columns=list("ABCD"))
df3#生成DataFrame
df4 = DataFrame({"张三":150,"李四":100},index=["语文","数学","英语","理综"])
df4#生成DataFrame
对DataFrame结构的数据进行索引
1)对列进行索引
第一种可以通过类似于字典的方式,第二种可以通过属性的方式
dic = {
"姓名":["小明","刘红","明子","基恩",夫卡","偌大"],
"语文":[120,130,140,110,110,100],
"数学":[130,110,100,100,100,120],
"外语":[120,130,123,125,112,143],
"综合":[230,240,254,234,100,100]
}
df = DataFrame(dic,index=list("abcdef"))
df.columns = ["python","java","h5","c++","php"]
df
df.java#以属性形式取值
df["java"]# 键值的形式取值
#索引多列
#属性不能索引多列
df[["python","java"]] #键值的形式 索引多列得到一个DataFrame
df[["python"]] #得到的依然是一个DataFrame
注意: 对列进行切片没有意义
2)对行进行索引
使用.ix[]来进行行索引
,返回的是一个Series,其中index为原来的columns。
- 使用 .loc[]加index来进行行索引
-使用 .iloc[]加整数来进行行索引
df.ix["a"] #通过行索引
df.loc["a":"b"]#使用显式索引,在行上面进行切片处理
df.iloc[0:3]#使用隐式索引(行号)进行索引切片处理
df.loc["a","python"] #进行索引时要先找行,再去找列#;不能先列后行
df.iloc[1,1] # 进行隐式索引时相当于索引数组