内容正文:
pandas知识点整理
班级:___________ 姓名:______________
1.pandas读取excel/csv文件:
import pandas as pd
df = pd.read_excel("gzb.xlsx")df.columns
df = pd.read_csv("gzb.csv")
#根据文件后缀名选取合适函数
df.index
df.values
2. 读取文件中的列标题
语句
print(df.columns)
结果
一般考察时,会使用for循环来遍历列标题
语句
for i in df.columns:
print(i)
结果
读取单个列的值:df.列标题/df["列标题"]
语句
print(df.姓名) #属性法
print(df["姓名"]) #字典法
结果
3. 读取文件中的行索引
语句
print(df.index)
结果
4. 读取文件中的某单元格的值
df.at[行索引,"列标题"] 或 df["列标题"][行索引] 或 df.列标题[行索引]
语句
print(df.at[2,"出勤天数"]) 或 df["出勤天数"][2] 或 df.出勤天数[2]
结果
22
索引单元格的值可能是为了修改某单元格的值。
如:df.at[1,"出勤天数"]=25,将稻小壳2的出勤天数修改为25
5. 筛选出符合条件的记录
对象名[对象名.列标题>=值] 或 对象名[对象名["列标题"]>=值]
# >=可以换成其它关系运算符,>、<、<=、==、in
语句
df.出勤天数>=15 #条件
df[df.出勤天数>=15] #筛选条件
结果
6. 返回前几项( head() )或后几项( tail() )
对象名.head()/对象名.tail() #head和tail括号内不加参数默认返回5行
df2=df.head(11) #获得df对象中的前11行,并存储到df2中
df3=df.tail(4) #获得df对象中的后4行,并存储到df3中
7. 插入函数
(1) 插入行
df3=df.append({"序号":16,"姓名":"小蒋","部门":"部门1"},ignore_index=True)
append()添加到DataFrame对象的最后一行,ignore_index是指忽视其本身的索引号,如这条记录就一条,添加前索引号应该是0,添加进去之后和df中的第一行记录的索引号冲突了。ignore_index=True就会采用df对象的索引号继续自动生成,所以索引号为15
(2) 插入列
①对象名.insert(列索引号,"列标题",数据)
如:df.insert(7,"应发合计",df.基本工资+df.奖金)
#在第7列(从0开始数)插入数据列,标题为“应发合计”,值为基本工资列和奖金列的和
#insert函数是个动作函数,不用赋值给新对象
②对象名["列标题"]=数据
如:df["应发合计"]=df.基本工资+df.奖金
#“应发合计”列不存在,直接索引并赋值,那么默认在最后一列添加,而append可以指定位置
思考:如果想插入扣款总金额,语句该如何写?(扣款总金额=五险一金+考勤扣款+其他扣款)
(答案请看资料最后)
8. 分组函数
新对象=对象名.groupby("列标题",as_index=True/False)
①
df2=df.groupby("部门",as_index=True).sum() #相同部门分为一组,并以组为单位进行求和
#as_index=True即将"部门"列替代原来的index列(就是0,1,2,3,4...这一列),如图第一列所示
②
df2=df.groupby("部门",as_index=False).sum()
#as_index=False,不将“部门”列作为index列,即维持原来的index列
思考:如何在两种不同分组结果的基础上,处理以下数据(答案请看资料最后)
①用pandas的plot函数绘制各部门总奖金的柱状图(假设模块均已导入)
第一种分组:____________________________________________________________________
第二种分组:____________________________________________________________________
②用maltplotlib绘制各部门总奖金的柱状图(假设模块均已导入)
第一种分组:____________________________________________________________________
第二种分组:____________________________________________________________________
③用两种方式获取部门6的奖金值(at方式和直接索引方式)
第一种分组:____________________________________________________________________
第二种分组:____________________________________________________________________
分组后索引单列求值:
df2=df.groupby("部门",as_index=False)["奖金"].sum()
df2=df.groupby("部门",as_index=True)["奖金"].sum()
9. 排序函数
新对象名=对象名.sort_values("列标题",ascending=True/False)
ascending参数用来描述排序后的对象是升序还是降序,默认值为True,升序
如:df1=df.sort_values("部门",ascending=True) #按照”部门”列升序排序
10. 涉及计算的函数:
函数
作用
sum()
求每个单元格中值的和
mean()
求每个单元格中值的平均值
max()
求每个单元格中值的最大值
min()
求每个单元格中值的最小值
count()
求非空单元格的个数/求非空数据项
count()和sum()的区别
df.count() #统计个数
df.sum() #数据相加求和,字符串拼接
axis=0:以行为单位计算统计值,第一行+第二行+第三行+...=最后一行的结果
axis=1:以列为单位计算统计值,第一列+第二列+第三列+...=最后一列的结果
df3=df.sum() #默认axis=0
print(df3)
df3=df.sum(axis=1) #当相加的值之间既有字符串又有数字,就忽略掉字符,直接数字相加
print(df3)
11. 删除函数
①drop函数 (df.drop(),df对象中的数据不被删除,需将删除后结果保存在新对象中)
作用
删除列 (axis=1)
删除行 (axis=0)
函数
新对象=对象名.drop("列标题",axis=1)
新对象=对象名.drop(行索引,axis=0)
举例
df3=df.drop("序号",axis=1)
#注意列必须写列标题,df3中是删除后的内容
df3=df.drop(1,axis=0)
#注意行要写行索引号,df中的内容没有删除
结果
②del函数
del df["列标题"] #df对象中的列会被删除
del df["序号"] #删除df对象中的”序号”列,不用赋值,df中的内容会删除,与drop()不同
12. 修改列名或者索引
修改列名:df2=df.rename({"基本工资":"基础工资"})
或 修改列名:df2=df.rename(columns={"基本工资":"基础工资"})
修改索引:df2=df.rename({0:1}) # 修改前:修改后
13. matplotlib模块绘图(import matplotlib.pyplot as plt)
功能
函数
结果
绘制线型图
plt.plot()
plt.plot(df.姓名,df.基本工资)
#将df中的姓名列作为横坐标,基本工资列作为纵坐标,
绘制线型图
绘制垂直柱形图
plt.bar()
plt.bar(df.姓名,df.基本工资)
绘制水平柱形图
plt.barh()
plt.barh(df.姓名,df.基本工资)
绘制散点图
plt.scatter()
plt.scatter(df.姓名,df.基本工资)
绘制图标的标题
plt.title()
plt.title("基本工资情况表")
显示图例
plt.legend()
#没有参数
plt.barh(df.姓名,df.基本工资,label="基本工资")
#label设置图例内容为“基本工资”,每个图表均可设置
plt.title("基本工资情况表")
plt.legend() #书写后上述label的值才可以显示
显示创建的所有绘图对象
plt.show()
#没有参数
上述图表的程序最后一行都需要书写plt.show(),右侧的图表才会显示出来
答案:
第7题(2)
思考:如果想插入扣款总金额,语句该如何写?(扣款总金额=五险一金+考勤扣款+其他扣款)
df["扣款总金额"]=df["五险一金"]+df["考勤扣款"]+df["其他扣款"] 或者
df.扣款总金额=df.五险一金+df.考勤扣款+df.其他扣款 或者
df.insert(11,"扣款总金额",df.五险一金+df.考勤扣款+df.其他扣款)
#在"应发合计"列的前一列添加"扣款总金额"列
第8题思考题:
①用pandas的plot函数绘制各部门总奖金的柱状图(假设模块均已导入)
第一种分组(as_index=True):df2["奖金"].plot(kind="bar")
#df2的index是部门列,现在再索引奖金列,所以横坐标是部门,纵坐标是奖金
#kind表示图表类型,bar指柱状图
#kind="line"表示线型图
第二种分组(as_index=False):df2.plot("部门" , "奖金" , kind="bar")
#以部门列和奖金列为坐标轴绘制柱状图
拓展:df2.plot(x="部门",y=["奖金","五险一金"],kind="line")
#绘制两个折线,所以y轴有两列数据
②(显示图表效果一致)
用maltplotlib绘制各部门总奖金的柱状图(假设模块均已导入)
第一种分组(as_index=True):plt.bar(df2.index , df2.奖金)
#注意此时"部门"列已经不存在了,是index列
第二种分组(as_index=False):plt.bar(df2.部门 , df2.奖金)
#matplotlib中的绘图函数在绘图时,如果需要图例,需要书写label="XXX"
③用两种方式获取部门6的奖金值(at方式和直接索引方式)
第一种分组(as_index=True):
df2.at["部门6","奖金"] 或 df2["奖金"][5]
#df2.at[行索引,列索引],行索引现在是部门,所以带引号,为字符串
#或者先索引出奖金列,再或者这个列表中的第六个值,也就是索引值为5的值
第二种分组(as_index=False):
df2.at[5 ,"奖金"] 或 df2["奖金"][5]
#这时候index列还是[0,1,2,3,4,5...],所以df2.at[5 ,"奖金"]
学科网(北京)股份有限公司
$$