python—Pandas库的基本使用

简介

  • 核心功能是在二维表格上做各种操作,增删,修改,和,方差等
  • 需要numpy的支持
  • 如果有openpyxl或xlrd或xlwt支持,还可以读写excel文档
  • 最关键的类:DataFrame——表示二维表格

Series类

  • Series是一维表格
  • 每个元素都带有标签而且具有下标,兼具列表和字典的访问形式
import pandas as pd
s=pd.Series(data=[80,90,100],index=['语文','数学','英语'])
for x in s:
    print(x,end=" ") #>>80 90 100
print("")

print(s['语文'],s[0]) #>>80 80
#>>同时兼顾标签和下标访问的能力

print(s[0:2]['数学']) #>>90
#0:2切片里面,标签为数学的值

print(s['数学':'英语']['数学'])#>>90 
#切片的操作,可以用标签进行

s['体育']=110 #可以像字典一样,添加元素
s2=s.append(pd.Series(120,index=['政治']))
print(s)
#>>语文     80
#>>数学     90
#>>英语    100
#>>体育    110
#>>dtype: int64
#>>from pandas in a future version. Use pandas.concat instead.
#添加方式提醒,未来版本可能没有append

s.pop('数学') #删除标签为数学的元素

print(s2['语文'],s2['政治'])#>>80 120

print(list(s2))#>>[80, 90, 100, 110, 120]

#Series的统计功能
print(s.sum(),s.min(),s.mean(),s.median())
#>>290 80 96.66666666666667 100.0 输出和,最小值,平均值,中位数
print(s.idxmax(),s.argmax())
#>>体育 2
#最大元素的 标签和下标

DataFrame

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

#DataFrame的构造
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
#输出的对齐设置

scores=[['Boys',108,115,97],['Girls',115,87,105],['Girls',100,60,130],['Boys',112,80,50]]
names=['LiuYiyi','WangWenwen','LiuYuyu','ChenHuacan']
courses=['性别','语文','数学','英语']
df=pd.DataFrame(data=scores,index=names,columns=courses)
print(df)
#>>             性别  语文  数学  英语
#>>LiuYiyi      Boys   108   115    97
#>>WangWenwen  Girls   115    87   105
#>>LiuYuyu     Girls   100    60   130
#>>ChenHuacan   Boys   112    80    50
#DataFrame 访问
print(df.values[0][1],type(df.values))#>>108 <class 'numpy.ndarray'>

print(list(df.index))
#>> ['LiuYiyi', 'WangWenwen', 'LiuYuyu', 'ChenHuacan']

print(list(df.columns)) 
#>>['性别', '语文', '数学', '英语']

print(df.index[2],df.columns[2])
#>>LiuYuyu 数学 

s1 = df['语文']
#s1是个Series,代表'语文'那一列

print(s1['LiuYiyi'],s1[0]) #>>108 108
print(df['语文']['LiuYiyi']) #>>108

s2 = df.loc['WangWenwen']#>>s2也是一个series,代表wangwenwen那一行
print(s2['性别'],s2['语文'],s2[2])
#>>Girls 115 87

#代码中的s1和s2都是表格的视图,修改其会把原表格内容修改

DataFrame的切片、增删和统计

DataFrame的切片:

  • iloc[行选择器,列选择器] ——用下标做切片
  • loc[行选择器,列选择器] ——用标签做切片
  • DataFrame的切片是视图
df2=df.iloc[1:3] #没有写列选择器,缺省情况就是所有列都要取
print(df2)
#>>             性别  语文  数学  英语
#>>WangWenwen  Girls   115    87   105
#>>LiuYuyu     Girls   100    60   130

#!!!下标切片区间是前闭后开,标签切片区间是前闭后闭

df2=df.loc['LiuYiyi':'LiuYuyu']
print(df2)
#>>             性别  语文  数学  英语
#>>LiuYiyi      Boys   108   115    97
#>>WangWenwen  Girls   115    87   105
#>>LiuYuyu     Girls   100    60   130

df3=df.iloc[:,0:3] #行选择器缺省,选择所有行
print(df3)
#>>           性别  语文  数学
#>>LiuYiyi      Boys   108   115
#>>WangWenwen  Girls   115    87
#>>LiuYuyu     Girls   100    60
#>>ChenHuacan   Boys   112    80

df3=df.loc[:,'语文':'英语']
print(df3)
#>>            语文  数学  英语
#>>LiuYiyi      108   115    97
#>>WangWenwen   115    87   105
#>>LiuYuyu      100    60   130
#>>ChenHuacan   112    80    50

#用列表做选择器
df4=df.iloc[:2,[1,3]] #行选择 0 1 行 ;列选择 第1和第3列,不存在第2列
print(df4)
#>>            语文  英语
#>>LiuYiyi      108    97
#>>WangWenwen   115   105

分析与统计

  • 如何挑选出来相应符合条件的行列
  • 如何排序
  • 如何求对应行列的中位数,和,标准差,平均值等
print("---下面是DataFrame的分析和统计---")
print(df.T) #df.T是df的转置矩阵,即行列互换的矩阵
#>>     LiuYiyi WangWenwen LiuYuyu ChenHuacan
#>>性别    Boys      Girls   Girls       Boys
#>>语文     108        115     100        112
#>>数学     115         87      60         80
#>>英语      97        105     130         50

print(df.sort_values('语文',ascending=False))#按语文成绩降序排列
#sort_values(inplace=True)>>可实现将df原地更改,返回值是None
#sort_values(axis=1)>>可实现对列的排序

#>>             性别  语文  数学  英语
#>>WangWenwen  Girls   115    87   105
#>>ChenHuacan   Boys   112    80    50
#>>LiuYiyi      Boys   108   115    97
#>>LiuYuyu     Girls   100    60   130
print(df.sum()['语文'],df.mean()['数学'],df.median()['英语'])
#>>435 85.5 101.0 某一列的和/平均分/中位数
print(df.min(axis=1)['LiuYiyi'],df.max(axis=1)['ChenHuacan'])
#>>97 112某一行的最高分/最低分

print(df['语文'].idxmax())#>>语文最高分所在行的标签
#>>WangWenwen

print(df['数学'].argmin())#>>数学最低分所在的行号
#>>2

print(df.loc[(df['语文']>100) & (df['数学']>=85)] )
#>>条件语句实现行列选择

#>>             性别  语文  数学  英语
#>>LiuYiyi      Boys   108   115    97
#>>WangWenwen  Girls   115    87   105

增删与修改

print("---下面是DataFrame的增删和修改---")
##修改与增加本质上在利用loc和iloc进行类似于字典的访问
##然后进行修改。增加的本质是字典的增加
df.loc['LiuYiyi','语文']=df.iloc[1,2]=150
#>>修改LiuYiyi的语文成绩和Wangwenwen的数学成绩

df['物理']=[80,70,60,100]#>>在末尾添加相应的列
df.insert(1,'体育',[89,77,76,45])#>>在列号为1处,插入相应列
df.loc['ZhouCC']=['Boys',20,150,140,100,80]
#>>在末尾添加相应的行,就需要用loc

df.loc['ChenHuacan']=['Boys',100,100,150,150,150]
#>>将ChenHuacan的全部信息进行修改
df.loc[:,'语文']=[30,60,90,100,120]
#>>将所有人的语文成绩进行修改
df.loc[:,'英语']+=10
#>>将所有人的英语成绩都加10分

df.columns=['Gender','PE','Chinese','Math','English','Physical']
#>>修改所有列标签
print(df)
#>>           Gender   PE  Chinese  Math  English  Physical
#>>LiuYiyi      Boys   89       30   115      107        80
#>>WangWenwen  Girls   77       60   150      115        70
#>>LiuYuyu     Girls   76       90    60      140        60
#>>ChenHuacan   Boys  100      100   150      160       150
#>>ZhouCC       Boys   20      120   140      110        80

##删除——调用df.drop()
df.drop(['PE','Physical'],axis=1,inplace=True)
#删除体育和物理成绩

df.drop('LiuYuyu',axis=0,inplace=True)
#删除LiuYuyu那一行的成绩

df.drop([df.index[i] for i in range(1,3)],axis=0,inplace=True)
#删除第一,第二行

df.drop([df.columns[i] for i in range(3)],axis=1,inplace=True)
#删除0,1,2三列

print(df)
#>>         English
#>>LiuYiyi      107
#>>ZhouCC       110
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caaaaaan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值