python数据结构
Pandas
pandas的数据结构是DataFrame与Series
Series
series是表格中的一行,类似一维数组,可以自定义标签
# 导入Series
from pandas import Series,DataFrame
# 创建Series,使用自定义索引
sel = Series(data=[1,'TheShy',20,'天不生theshy,Lpl上单万古如长夜'],
index = ['排名','ID号','年龄','评语'])#注意参数值的个数相同
print(sel)
当data为字典时,字典的键key会作为索引,value作为数据值
from pandas import Series,DataFrame
# 将字典转换为Series
dic={
"red":100,"black":400,"green":300,"pink":900}
se2=Series(data=dic)
print(se2)
#red 100
#black 400
#green 300
#pink 900
#dtype: int64
使用values方法获取数据的值,index.tolist获取索引的值,items获取成对的索引和值
from pandas import Series
emp=['001','002','003','004','005','006']
name=['亚瑟', '后裔','小乔','哪吒' ,'虞姬','王昭君']
series = Series(data=name,index=emp)
# 获取数据的值
print(series.values)
# 获取索引的值
print(series.index.tolist())
# 获取每对索引和值
print(list(series.items()))
print(series)
#['亚瑟' '后裔' '小乔' '哪吒' '虞姬' '王昭君']values方法
#['001', '002', '003', '004', '005', '006']index.tolist方法
#[('001', '亚瑟'), ('002', '后裔'), ('003', '小乔'), ('004', '哪吒'), ('005', '虞姬'), ('006', '王昭君')]items方法
#001 亚瑟
#002 后裔
#003 小乔
#004 哪吒
#005 虞姬
#006 王昭君
可以通过索引值来选择数据
# 使用索引值获取单个数据
print(series['001'])
#亚瑟
# 使用索引值获取多个不连续的数据,注意[[ ]]
print('索引下标',series[['002','004']])
#索引下标 002 后裔
#004 哪吒
# 使用切片获取连续的数据
print('索引切片',series['001':'004'])
#索引切片 001 亚瑟
#002 后裔
#003 小乔
#004 哪吒
当使用默认的index值时,切片取不到最后的值
# 使用切片获取连续的数据
print('位置切片',series[0:3])
#位置切片 001 亚瑟
#002 后裔
#003 小乔
可以使用for循环遍历拿到data、index和index-data对的值
# 遍历并拿到data数据
for value in series:
print(value)
# 遍历并拿到index数据
for value in series.keys():
print(value)
# 遍历并拿到每对索引和数据
for value in series.items():
print(value)
DataFrame
dataframe相当于整个表格
dataframe是二维数据结构,三个参数:data、index、columns(列索引)
可以用ndim查看维度,shape看行数和列数,index、column看行列索引值
import pandas as pd
df_dict = {
'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
'age':['18','20','19','22'],
'weight':['50','55','60','80']
}
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
print(df)
# 获取行数和列数
print(df.shape)
# 获取行索引
print(df.index.tolist())
# 获取列索引
print(df.columns.tolist())
# 获取数据的维度
print(df.ndim)
# name age weight
#001 ZhangSan 18 50
#002 LiSi 20 55
#003 WangWu 19 60
#004 ZhaoLiu 22 80
#(4, 3) 行列数
#['001', '002', '003', '004'] 行索引
#['name', 'age', 'weight'] key 列索引
#2 维度
数据量比较大但想看数据的具体情况的时候,可以只获取前几行或者后几行,了解数据的构成即可
# 获取前两条,默认值是5
df.head(2)
# 获取后两条,默认值是5
df.tail(2)
创建dataframe
from pandas import Series,DataFrame
# 创建二维列表存储选手信息
lol_list = [['上单','TheShy',20],
['打野','小天',19],
['中单','Faker',23],
['ADC','Uzi',22],
['辅助','Ming',21]]
# 创建dataframe
df = DataFrame(data=lol_list,
index=['a','b','c','d','e'],
columns=['位置','ID号','年龄'])
print(df)
# 位置 ID号 年龄
#a 上单 TheShy 20
#b 打野 小天 19
#c 中单 Faker 23
#d ADC Uzi 22
#e 辅助 Ming 21
当用字典创建dataframe时,key作为列索引
dic={
'位置': ['上单', '打野', '中单', 'ADC','辅助'],
'ID号': ['TheShy', '小天', 'Faker', 'Uzi', 'Ming'],
'year': [20, 19, 23, 22,21]}
df=pd.DataFrame(dic)
print(df)
# 位置 ID号 year
#0 上单 TheShy 20
#1 打野 小天 19
#2 中单 Faker 23
#3 ADC Uzi 22
#4 辅助 Ming 21
获取行数据
# 通过位置索引切片获取一行
print(df[0:1])
# 通过位置索引切片获取多行
print(df[1:3])
# 获取多行里面的某几列
print(df[1:3][['name','age']])
# df[]不支持直接输入标签索引获取行数据,例如:df['001']。获取DataFrame的列
print(df['name'])
# 如果获取多个列
print(df[['name','age']])
行标签索引筛选loc[],通过行位置索引筛选iloc[]
import pandas as pd
df_dict = {
'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
'age':['18','20','19','22'],
'weight':['50','55','60','80']
}
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
print(df)
# 获取某一行某一列的数据
print(df.loc['001','name'])
# 某一行多列的数据
print(df.loc['001',['name','weight']])
# 一行所有列
print(df.loc['001',:])
# 选择间隔的多行多列
print(df.loc[['001','003'],['name','weight']])
# 选择连续的多行和间隔的多列
print(df.loc['001':'003'