python的第三方库pandas中两种数据结构Series,DataFrame的介绍与使用

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
- 列索引:columns
- 值: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] # 进行隐式索引时相当于索引数组

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值