pandas系列、数据帧、索引、切片、分组、聚合练习

pandas练习

1.练习

import pandas as pd
import numpy as np
# 1.1.创建一个系列:
# (1)通过传入一个列表list,创建一个系列;
ps=pd.Series([3,5,7,9],index=['a','b','c','d'])
print(ps)
# (2)使用数组 创建系列;
data=np.array(np.linspace(3,10,4,dtype=int))
ps1=pd.Series(data,index=['a','b','c','d'])
print(ps1)
# (3)使用字典dict来创建一个系列。
data1={
    'a':3,
    'b':5,
    'c':7,
    'd':9
}
ps2=pd.Series(data1)
print(ps2)
# (4).通过传入constant常量,创建一个系列
ps3=pd.Series(5,index=['a','b','c','d'])
print(ps3)
# 2.已知一个序列s5,通过位置(行序号)获取3这个数据
# (1)通过位置 同时获取3和7两个数据
print(ps.loc[['a', 'c']])

# (2)获取后3个数据
print(ps.tail(3))
# (3)获取除5之外的所有数据
index1=[i for i in ps.index if i!='b']
print(ps[index1])

2.练习

import pandas as pd
import numpy as np
# 3.创建一个数据帧对象:
# (1)通过传入一个二维列表,创建一个数据帧对象
ar=np.array([['maxsu',25,'m',4.45],['katie',34,'f',2.78],['vina',31,'f',3.9],['lia',np.NaN,'m',4.6]])
df1=pd.DataFrame(ar,index=['a','b','c','d'],columns=['name','age','sex','level'])
print(df1)
# (2)使用系列Series创建一个数据帧对象
pps1=pd.Series(['maxsu',25,'m',4.45],index=['name','age','sex','level'])
pps2=pd.Series(['katie',34,'f',2.78],index=['name','age','sex','level'])
pps3=pd.Series(['vina',31,'f',3.9],index=['name','age','sex','level'])
pps4=pd.Series(['lia',np.NaN,'m',4.6],index=['name','age','sex','level'])
ps=pd.DataFrame([pps1,pps2,pps3,pps4],index=['a','b','c','d'])
print(ps)

# (3)使用字典dict创建一个数据帧对象
dict={
    'name':['maxsu','katie','vina','lia'],
    'age':[25,34,31,np.NaN],
    'sex':['m','f','f','m'],
    'level':[4.45,2.78,3.9,4.6]
}
df2=pd.DataFrame(dict,index=['a','b','c','d'])
print(df2)

# 4.给上一个数据帧上进行操作:
# (1)查看name这一列
print(df2['name'])
# (2)查看name,age两列
print(df2[['name','age']])
# (3)添加一列 score,其中数值都是100
df2['score']=[100,100,100,100]
# print(df2)
# (4)添加一列 AAA等于score这一列数据除以level列数据
df2['AAA']=df2['score']/df2['level']
# print(df2)
# 删除sex这一列
df2.drop(labels=['sex'],axis=1,inplace=True)
# print(df2)


# 5.在第4题数据帧上进行操作:
# (1)查看Katie这一行
# print(df1.loc['b'])
# (2)添加一行数据:Amy  20  f   4.1
data2={
    'name':'amy',
    'age':20,
    'sex':'f',
    'level':4.1
}
dff=pd.DataFrame(data2,index=['e'])
df3=df1.append(dff)
print(df3)
# (3)删除Vina这一行
print(df3.drop(labels=['c'],axis=0,inplace=False))

3.练习

import pandas as pd
import numpy as np
# 2.创建数据帧如下
data={
    'Name':['Alva','Ben','Cary','Nancy'],
    'Stage':['p1','p2','p2','p1'],
    'Theory':[82,50,95,65],
    'Skill':[76,35,91,72]
}
ppp=pd.DataFrame(data,index=['a','b','c','d'])
print(ppp)
# 2.查看Name和Stage两列数据
print(ppp[['Name', 'Stage']])
# 3.查询Stage 为P1 且Theory 超过70分的信息
print(ppp[(ppp['Stage'] == 'p1') & (ppp['Theory'] >= 70)])
# 4.统计Skill列数据的最高分和最低分
print('最高分:',ppp['Skill'].max())
print('最低分:',ppp['Skill'].min())
# 5.根据Stage分组,并求各分组Theory的平均值
print(ppp.groupby('Stage').agg(np.mean)['Theory'])
# 6.删除Stage列
del ppp['Stage']
# 7.添加一列,列名为Sum,其数据等于Theory列 + Skill列
ppp['sum']=ppp['Theory']+ppp['Skill']
print(ppp)
# 8.对Sum列进行排序(按照降序排序)
ppa=ppp.sort_values('sum',ascending=False)
print(ppa)
# 9.根据Sum列数据,通过自定义函数的方式,添加一列Level。要求:
# 将150—200分定义为A,100—150定义为B,0-100定义为C
def fa(x):
    if 150<x<200:
        return 'A'
    elif 100<x<150:
        return 'B'
    else:
        return 'C'
ppp['level']=ppp['sum'].map(fa)
print(ppp)


4.练习

import pandas as pd
import numpy as np
# 1.加载房天下( ftx.xls )数据集,提取时间为2009年的数据,使用分组函数,计算上海和沈阳的地区的销售平均值
ftx=pd.read_excel(r'ftx.xls')
ff=ftx[(ftx['销售区域'] == '上海') | (ftx['销售区域'] == '沈阳')]
print(ff[ff['年'] == 2009].groupby('销售区域').agg(np.mean)['销售数量'])

# 2.提取时间为2009年的数据,使用分组函数,计算上海和沈阳的地区的销售最大值
print(ff[ff['年'] == 2009].groupby('销售区域').agg(np.max)['销售数量'])


# 3.计算沈阳地区2009年每季度的销售总和
def fn(x):
    if 1<=x<=3:
        return 1
    elif 4<=x<=6:
        return 2
    elif 7<=x<=9:
        return 3
    else:
        return 4
ftx['季度']=ftx['月'].map(fn)
fa=ftx[(ftx['年'] == 2009) & (ftx['销售区域'] == '沈阳')]

print(fa.groupby('季度').agg(np.sum)['销售数量'])
# 4.计算沈阳地区2009年每季度的销售均值
print(fa.groupby('季度').agg(np.mean)['销售数量'])

数据:ftx.xls

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小飞龙程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值