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
注意: 根据下标切片时,不包含末端索引(正常);根据键值切片时,包含末端索引(反常)
<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]
结果:
来源:CSDN
作者:wisewho?
链接:https://blog.csdn.net/weixin_44225602/article/details/102760252