数据分析库pandas

pandas简介

核心功能是在二维表格上做各种操作,如增删、修改、求一列数据的和、方差、中

位数、平均数等

需要numpy支持

如果有openpyxl(xlsx)或xlrd(xls)或xlwt(xls)支持,还可以读写excel文档。

最关键的类:DataFrame,表示二维表格

pip install pandas 安装

pandas重要类Series

Series一维表格,每个元素都有标签和下标,兼具字典和列表的访问形式

"""Series一维表格,每个元素都有标签和下标,兼具字典和列表的访问形式"""
s=pd.Series(data=[80,90,100],index=['语文','数学','英语']) #data是数值,index是行标签
for x in s: #遍历x中的元素
    print(x,end=" ") #输出结果80 90 100
print(" ")
print(s['语文'],s[1]) #s['语文']按标签取对应的值,s[1]按下标取对应的值类似列表 输出结果80 90
print(s[0:2]['数学']) #在列表中取0、1,然后取其中标签为数学的值 输出结果90
print(s['数学':'英语'][1]) #在列表中取标签从'数学'到'英语'的所有值,然后取下标为1的元素的值,输出结果100
for i in range(len(s.index)): #取标签的长度,遍历标签
    print(s.index[i],end=" ")  #输出结果语文 数学 英语
s['体育']=110 #在尾部添加一项体育,值110
s.pop('数学') #删除了数学标签和对应的值
s2=s.append(pd.Series(120,index=['政治'])) #在s的尾部追加政治 120生成新的数组s2 s2的值80 100 110 120
print(s2['语文'],s2['政治']) #在s2中取出语文和政治的值 输出结果 80 120
print(list(s2)) #将列表s2的值强制转化为列表  输出结果[80, 100, 110, 120]
print(s.sum(),s.min(),s.mean(),s.median()) #输出s的和,最小值,平均值,中位数 290 80 96.66666666666667 100.0
print(s.idxmax(),s.argmax()) #取index值最后的一个和下标值最大的一个 ,输出结果体育 2

DataFrame的构造和访问

DataFrame是带行列标签的二维表格,每一列都是一个Series

"""DataFrame的构造和访问"""
pd.set_option('display.unicode.east_asian_width',True) #输出数据对齐设置
scores=[['男',108,115,97],['女',115,87,105],['女',100,60,130],['男',112,80,50]] #定义数据体
names=['刘一哥','王二姐','张三妹','李四弟'] #定义行标签
coures=['性别','语文','数学','英语'] #定义列表标签
df=pd.DataFrame(data=scores,index=names,columns=coures) #构造二维数据
print(df) #打印构造的数据,输出结果如下
#       性别  语文  数学  英语
#刘一哥   男   108   115    97
#王二姐   女   115    87   105
#张三妹   女   100    60   130
#李四弟   男   112    80    50
print(df.values[0][1],type(df.values)) #查看数据体中第0行第1列的值,查看values的数据类型,输出结果108 <class 'numpy.ndarray'>
print(list(df.index)) #将行属性强制转化为列表输出,输出结果['刘一哥', '王二姐', '张三妹', '李四弟']
print(list(df.columns)) #将列属性强制转化为列表输出,输出结果['性别', '语文', '数学', '英语']
print(df.index[2],df.columns[2]) #取出下标为2的行标签和列标签,输出结果张三妹 数学
s1=df['语文'] #取出语文一列
print(s1['刘一哥'],s1[0]) #取出s1中刘一哥的语文成绩,取出数据体中标签为0的成绩,输出结果108 108
print(df['语文']['刘一哥']) #取出列标签为'语文',行标签'刘一哥'的成绩,只能先取列标签再取行标签,否则娶不到数据,输出结果108
s2=df.loc['王二姐']  #取出王二姐一整行的值
print(s2['性别'],s2['语文'],s2[2]) #取出s2的性别、语文标签的值,取出下标为2的数值,输出结果女 115 87

DataFrame的切片和统计

iloc[行选择器,列选择器] 用下标做切片

loc[行选择器,列选择器] 用标签做切片

DataFrame的切片是视图

print('---------DataFrame的切片------------------')
# df2=df.iloc[1:3]  用下标取df数据体的第1、2行数据,列没有指定,默认所有列
df2=df.loc['王二姐':'张三妹']  #用标签取,结果同上
print(df2) #输出结果如下
#       性别  语文  数学  英语
#王二姐   女   115    87   105
#张三妹   女   100    60   130
# df3=df.iloc[:,0:3] 用下标取df数据体的第0、1、2列数据,行没有指定,默认所有行
df3=df.loc[:,'性别':'数学'] #用标签取,结果同上
print(df3) #输出结果如下
#       性别  语文  数学
#刘一哥   男   108   115
#王二姐   女   115    87
#张三妹   女   100    60
#李四弟   男   112    80
# df4=df.iloc[:2,[1,3]]  用下标取df数据体的第0、1行,列取第1、3列
df4=df.loc[:'王二姐',['语文','英语']] #用标签取,结果同上
print(df4) #输出结果如下
#        语文  英语
#刘一哥   108    97
#王二姐   115   105
# df5=df.iloc[[1,3],2:4] 用下标取df数据体的第1、3行,列取第2、3列
df5=df.loc[['王二姐','李四弟'],'数学':'英语'] #用标签取,结果同上
print(df5) #输出结果如下
#        数学  英语
#王二姐    87   105
#李四弟    80    50

DataFrame的分析统计功能

print('---------下面是DataFrame的分析统计功能-------')
print(df.T) #把df的行列转置,输出结果如下
#     刘一哥 王二姐 张三妹 李四弟
#性别     男     女     女     男
#语文    108    115    100    112
#数学    115     87     60     80
#英语     97    105    130     50
print(df.sort_values('语文',ascending=True))  #将数据按语文成绩从低到高排列,输出结果如下
#       性别  语文  数学  英语
#张三妹   女   100    60   130
#刘一哥   男   108   115    97
#李四弟   男   112    80    50
#王二姐   女   115    87   105

print(df.sum()['语文'],df.mean()['数学'],df.median()['英语']) #求语文的成绩和,数学的平均成绩,英语的成绩中位数,输出结果435 85.5 101.0
print(df.min()['语文'],df.max()['数学']) #求语文的最低分,数学的最高分,输出结果100 115
print(df.max(axis=1)['王二姐']) ##取['王二姐']各个科目的最大分数,输出结果115
print(df['语文'].idxmax()) #取语文这一列中值最大的行标签,输出结果王二姐
print(df['数学'].argmin())#取数学这一列中值最小的行号,输出结果2
print(df.loc[(df['语文']>100)&(df['数学']>=85)]) #取出语文成绩大于100且数学成绩大于等于85的记录,输出结果
#       性别  语文  数学  英语
#刘一哥   男   108   115    97

DataFrame的增删和修改

"""DataFrame的增删和修改"""
print('-------下面是DataFrame的增删和修改----------')
df.loc['王二姐','英语']=df.iloc[0,1]=150 #将'王二姐'的'英语'成绩改成150,将第0行第1列的值改成150
df['物理']=[80,70,90,100] #如果原来有物理这一列就改变原来的值,如果没有就新增物理这一列
df.insert(1,'体育',[89,77,76,54]) #插入体育成绩到第一列
df.loc['李四弟']=['男',100,100,100,100,100] #把李四弟的成绩都改成100
df.loc[:,'语文']=[20,20,20,20] #把语文成绩都改成20
df.loc['钱五叔']=['男',100,100,100,100,100] #新增一行钱五叔,各科成绩都是100
df.loc[:,'英语']+=10 #把英语成绩都加10
df.columns=['性别','体育','语文','数学','English','物理']
df.drop(['体育','物理'],axis=1,inplace=True) #删除体育、物理2列成绩,axis=1代表操作列,inplace=True代表改变原来的数组
df.drop('王二姐',axis=0,inplace=True) #删除王二姐的成绩,axis=0代表操作行,inplace=True代表改变原来的数组
df.drop([df.index[i] for i in range(1,3)],axis=0,inplace=True) #删除第1、2行
df.drop([df.columns[i] for i in range(3)],axis=1,inplace=True) #删除第1到2列
print(df)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值