pandas (一) 两种数据结构

一. pandas的两种数据结构

1. 一维数据结构 - Series

(1). 四种创建方式

  • 通过list创建
import pandas as pd

s1 = pd.Series([1,2,3,4])
s1

# 结果 左侧
0    1
1    2
2    3
3    4
dtype: int64
  • 通过数组创建
import numpy as np
import pandas as pd

n1 = np.arange(2,10)
pd.Series(n1)

# 结果
0    2
1    3
2    4
3    5
4    6
5    7
6    8
7    9
dtype: int32  # 注意类型变了

指定索引
指定的索引数目和值数目必须相等,一一对应

n1 = np.arange(2,10)
pd.Series(n1, index=list("abcdefgh"))

# 结果
a    2
b    3
c    4
d    5
e    6
f    7
g    8
h    9
dtype: int32
  • 通过字典来创建(特殊
import pandas as pd

dic = {'name':'Araon', 'age':'21', 'sex':'male'}
s1 = pd.Series(dic)
s1

# 结果
name    Araon
age        21
sex      male
dtype: object

指定索引
索引的内容可以和字典键值一样,也可不同,可以多或者重复,也可以少

import pandas as pd

dic = {'name':'Araon', 'age':'21', 'sex':'male'}
s1 = pd.Series(dic, index=["sex", "sex", "name", "country"])
s1

# 结果
sex         male
sex         male
name       Araon
country      NaN
dtype: object
  • 通过循环创建
import pandas as pd

pd.Series(range(4))
# 结果
0    0
1    1
2    2
3    3
4    4
dtype: int64

(2). Series属性

先创建一个Series实例

import pandas as pd

s1 = pd.Series(["apple", "pear", "orange"], index=list("abc"))
s1

# 结果
a     apple
b      pear
c    orange
dtype: object

index属性

s1.index
# 结果
Index(['a', 'b', 'c'], dtype='object')

dtype属性

s1.dtype
# 结果
dtype('O')

name属性

1.给整个Series对象添加name

s1.name = "number"
s1

# 结果 出现name属性
0     apple
1      pear
2    orange
Name: number, dtype: object

2.给索引添加name

s1.index.name = "index"
s1

# 结果
index
0     apple
1      pear
2    orange
Name: number, dtype: object

values属性

s1.values

# 结果
array(['apple', 'pear', 'orange'], dtype=object)

(3). Series索引

先指定一个索引名

s2 = pd.Series(range(5), index=list("acbde"))
s2
# 结果
a    0
c    1
b    2
d    3
e    4
dtype: int64

<1>. (行)索引取一个值

两种取值方法:下标键值

# 键值
r1 = s2["c"]
# 下标
r2 = s2[1]
display(r1, r2)

# 结果
1
1

<2>. 切片索引取值

r1 = s2["b":"a":-1]
r2 = s2[2:0:-1]
display(r1, r2)

# 结果
b    2
c    1
a    0
dtype: int64
b    2
c    1
dtype: int64

注意: 根据下标切片时,不包含末端索引(正常);根据键值切片时,包含末端索引(反常),如果创建了index,类型为int数字,看起来像下标索引,实际上是标签索引,会包含末端

<3>. 不连续索引取值

r1 = s2[[0, 2, 4]]
r2 = s2[["a", "b", "e"]]
display(r1, r2)

# 结果
a    0
b    2
e    4
dtype: int64
a    0
b    2
e    4
dtype: int64

<4>. 布尔索引取值

r1 = s2[s2>3]

condit = s2>3
r2 = s2[condit]

display(r1, r2)

# 结果
a    False
c    False
b    False
d    False
e     True
dtype: bool

e    4
dtype: int64
e    4
dtype: int64

(4). 基本函数的使用

先创建一个Series实例

s1 = pd.Series([11,22,np.nan,44,np.nan,66,77], index=list("acbdefg"))
s1

# 结果
a    11.0
c    22.0
b     NaN
d    44.0
e     NaN
f    66.0
g    77.0
dtype: float64

<1>. head(n=5)函数
取开头几行数据,默认取5行

s1.head()

# 结果
a    11.0
c    22.0
b     NaN
d    44.0
e     NaN
dtype: float64

<2>. tail(n=5)函数
取结尾5行数据

s1.tail()

# 结果
b     NaN
d    44.0
e     NaN
f    66.0
g    77.0
dtype: float64

<3>. isnull()和notnull()
判断有无缺失值, 返回bool类型Series对象实例

display(s1.isnull(), s1.notnull())

# 结果
a    False
c    False
b     True
d    False
e     True
f    False
g    False
dtype: bool

a     True
c     True
b    False
d     True
e    False
f     True
g     True
dtype: bool

2. 二维数据结构(表格形) - DataFrame

(1). 创建方式

字典类创建

形如:{ { } }
数据按列排序
1.以列表、元组或数组,为字典value来创建DataFrame

datas = {"Chinese":[98, 90, 88], "Math":(97, 95, 80), "English":np.random.randint(70,100,size=3)}

pd.DataFrame(datas)

结果:
在这里插入图片描述
2.以Series构成的字典创建Dataframe

datas = {"Chinese":pd.Series(range(80,85)), "Math":pd.Series(range(85,90)), "English":pd.Series(range(90,95))}

pd.DataFrame(datas)

结果:
在这里插入图片描述
3.一个字典作为另一个字典的value来创建DataFrame

datas = {"li":{"Chinese":90, "Math":90, "English":90}, "chen":{"Chinese":85, "Math":87, "English":89}, "wang":{"Chinese":80, "Math":82, "English":84}}

pd.DataFrame(datas)

结果:
在这里插入图片描述

列表类创建

形如:[ [ ] ]
按二维列表顺序排列,一个数据一行
1.二维数组对象创建DataFrame

n1 = np.arange(12).reshape((3,4))
n1

# 结果
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

pd.DataFrame(n1)

结果:
在这里插入图片描述
2.字典构成的列表创建DataFrame

list1 = [{"Chinese":90, "Math":90, "English":90},{"Chinese":85, "Math":87, "English":89},{"Chinese":80, "Math":82, "English":84}]

pd.DataFrame(list1)

结果:
在这里插入图片描述

3.Series构成的列表创建DataFrame

list2 = [pd.Series(range(4)),pd.Series(range(4, 8))]
pd.DataFrame(list2)

结果:
在这里插入图片描述

(2). DataFrame属性

先创建一个DataFrame对象实例

pd1 = pd.DataFrame(np.arange(9).reshape(3,3), index=list("acb"), columns=list("ABC"))
pd1

结果:
在这里插入图片描述
1. values属性
查看所有值

pd1.values

结果:
在这里插入图片描述
2. index属性
查看行索引

pd1.index

结果:
在这里插入图片描述

3. columns属性
查看列索引

pd1.columns

结果:
在这里插入图片描述
(特殊)指定行索引index和列索引columns

pd1 = pd.DataFrame({'A':[1,2,3],'B':[3,4,5],'C':[5,6,7]}, index=list("abc"), columns=list("ABC"))
pd1

结果:
在这里插入图片描述
当index数量与给定不等时报错,如:index=list(“abcd”)
当columns数量与给定不等时,不报错,但值为NAN,如:columns=list(“ABc”)
该特征与字典有关,类似于Series中利用字典进行创建
在这里插入图片描述

(3). DataFrame的基本使用

pd1 = pd.DataFrame(np.arange(9).reshape(3,3), index=list("acb"), columns=list("ABC"))
pd1

结果:
在这里插入图片描述

T转置
pd1.T

在这里插入图片描述

通过列索引获取列数据
pd1['A']

结果:
在这里插入图片描述

增加列数据
pd1['D'] = [9, 8, 7]
pd1

结果:
在这里插入图片描述

删除列
del(pd1['A'])

结果:
在这里插入图片描述

选取某个值

列索引不可以为下标索引,只可为键值
错误:
在这里插入图片描述
结果:
在这里插入图片描述
正确:

pd1['B'][1]

结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值