Python-pandas练习2

4

# 1、打开订单详情“meal_order_detail.cvs”文件(注意编码是utf-8)
# 2、使用pandas 中的统计函数计算菜品销售的平均单价和售价中位数
# 3、统计菜品销售数目
# 4、用pandas描述性统计方法进行总体分析描述
# 5、打开rs.csv文件,读取到DataFrqme框架中
# 6、统计南京分公司薪水大于4000的人员
# 7、统计南京分公司薪水大于4000的且部门为软件部的薪水的最大值、最小值、均值

import pandas as pd
# 1、打开订单详情“meal_order_detail.cvs”文件(注意编码是utf-8)
df=pd.read_csv(r'meal_order_detail.csv',header=0,encoding='utf-8')
print(df)
print('--------------------------------------------------------')
# 2、使用pandas 中的统计函数计算菜品销售的平均单价和售价中位数
mean=df.amounts.mean()
print('平均数:',mean)
print('--------------------------------------------------------')
median=df.amounts.median()
print('中位数:',median)
print('--------------------------------------------------------')
# 3、统计菜品销售数目
sum=df.counts.sum()
print('总和:',sum)
print('--------------------------------------------------------')
# 4、用pandas描述性统计方法进行总体分析描述
describe=df.describe()
print('描述统计:',describe)
print('--------------------------------------------------------')
# 5、打开rs.csv文件,读取到DataFrqme框架中
df2=pd.read_csv(r'rs.csv',header=0,encoding='gbk')
print(df2)
print('-------------------------------------------------------')
# 6、统计南京分公司薪水大于4000的人员
cnt=df2[(df2['分公司']=='南京')&(df2.薪水>4000)].薪水.count()
print('南京分公司薪水大于4000的人员:',cnt)
print('-------------------------------------------------------')
# 7、统计南京分公司薪水大于4000的且部门为软件部的薪水的最大值、最小值、均值
max1=df2[(df2['分公司']=='南京')&(df2.薪水>4000)&(df2['部门']=='软件部')].薪水.max()
print('最大值:',max1)
print('-------------------------------------------------------')
min1=df2[(df2['分公司']=='南京')&(df2.薪水>4000)&(df2['部门']=='软件部')].薪水.min()
print('最小值:',min1)
print('-------------------------------------------------------')
mean=df2[(df2['分公司']=='南京')&(df2.薪水>4000)&(df2['部门']=='软件部')].薪水.mean()
print('均值:',mean)
5

# 一、学生信息(xsxx)、学生成绩(xscj)、课程信息(kcxx)字段不同,在数据分析过程中需要使用全量数据,故需要将几张表做堆叠向堆叠操作。
# 二、学生信息、学生成绩、课程信息字段表两两之间存在相同意义的字段,因此需通过主键合并的方式将三张表合并为一张宽表。

import pandas as pd

df1=pd.read_csv(r'xsxx.csv',header=0,encoding='gbk')
df2=pd.read_csv(r'xxcj.csv',header=0,encoding='gbk')
df3=pd.read_csv(r'kcxx.csv',header=0,encoding='gbk')
# 一、学生信息(xsxx)、学生成绩(xscj)、课程信息(kcxx)字段不同,在数据分析过程中需要使用全量数据,故需要将几张表做堆叠向堆叠操作。
a=pd.concat([df1,df2,df3],axis=0,join='outer')
print(a)
print('-----------------------------------------------------')
b=pd.concat([df1,df2,df3],axis=1,join='outer')
print(b)
print('-----------------------------------------------------')
# 二、学生信息、学生成绩、课程信息字段表两两之间存在相同意义的字段,因此需通过主键合并的方式将三张表合并为一张宽表。
c1=pd.merge(df1,df2,how='outer')
d1=pd.merge(c1,df3,how='outer')
print(d1)
d1.to_csv('1.csv',encoding='gbk')
print('-------------------------------------------------------')
c2=pd.merge(df1,df2,how='inner')
d2=pd.merge(c2,df3,how='inner')
print(d2)
d2.to_csv('2.csv',encoding='gbk')
6

# 一、创建Series["数据可视化","C语言","数据结构","操作系统","计算机网络"],index[["a", "b","c", "d", "e"]]
#   1)访问指定索引a、d;区间a--d
#   2)添加另外一个系列(系列自创) ,并重新索引
#   3)指定索引赋值,指定区间赋值
#   4)显示长度大于4的系列
# 二、产生一个维度(4,,5)的数组,以此创建一个DataFrame结构,要求指定有明确的行列标签
# 三、如下结构,创建DataFrame
#     姓名    性别   年龄    城市
# A   张晓    女     2001   北京
# B   李东    女     2001   上海
# C   王小二   男    2003    广州
# D   赵小明   男    2002    北京
# 1、按上面形式建立DataFrame数据结构df
# 2、显示df的值、索引、维度和形状
# 3、分别以列索引方式显示0到3行的姓名、城市列
# 4、以属性方式显示性别为“女”的人员的姓名
# 5、分别用loc、iloc式显示0到3行的姓名、城市列
# 6、按前面格式,添加一条记录:就是你自己的信息,使用新索引。

import pandas as pd
import numpy as np
# 一、创建Series["数据可视化","C语言","数据结构","操作系统","计算机网络"],index[["a", "b","c", "d", "e"]]
data=["数据可视化","C语言","数据结构","操作系统","计算机网络"]
index=["a", "b","c", "d", "e"]
s=pd.Series(data,index)
print(s)
print('---------------------------------------------------')
#   1)访问指定索引a、d;区间a--d
a=s.loc[['a','d']]
print(a)
print('---------------------------------------------------')
a=s.loc['a':'d']
print(a)
print('---------------------------------------------------')
#   2)添加另外一个系列(系列自创) ,并重新索引
data2=["数据可视化","Python","数据结构","Web","计算机网络",'数据分析','爬虫','计算机视觉']
index2=["I", "II","III", "IV", "V", "VI", "VII", "VIII"]
s2=pd.Series(data2,index2)
print(s2)
print('---------------------------------------------------')
#   3)指定索引赋值,指定区间赋值
s2.loc['III']='软件开发'
print(s2)
print('---------------------------------------------------')
s2.loc['III':'V']='c','java','Verilog'
print(s2)
print('---------------------------------------------------')
#   4)显示长度大于4的系列
b=s2[s2.apply(len)>4]
print(b)
print('---------------------------------------------------')
# 二、产生一个维度(4,,5)的数组,以此创建一个DataFrame结构,要求指定有明确的行列标签
arr=np.arange(20).reshape(4,5)
index=range(4)
col=range(5)
df1=pd.DataFrame(arr,index,col)
print(df1)
print('---------------------------------------------------')
# 三、如下结构,创建DataFrame
#     姓名    性别   年龄    城市
# A   张晓    女     2001   北京
# B   李东    女     2001   上海
# C   王小二   男    2003    广州
# D   赵小明   男    2002    北京
# 1、按上面形式建立DataFrame数据结构df
data3={
    '姓名':['张晓','李东','王小二','赵小明'],
    '性别':['女','女','男','男'],
    '年龄':['2001','2001','2003','2002'],
    '城市':['北京','上海','广州','北京']
}
index3=['A','B','C','D']
df=pd.DataFrame(data3,index3)
print(df)
print('---------------------------------------------------')
# 2、显示df的值、索引、维度和形状
val=df.values
print('df的值:',val)
i=df.index
print('df的索引:',i)
ndim=df.ndim
print('df的维度:',ndim)
shape=df.shape
print('df的形状:',shape)
print('---------------------------------------------------')
# 3、分别以列索引方式显示0到3行的姓名、城市列
a1=df['姓名'][0:3]
print(a1)
print('---------------------------------------------------')
a2=df['城市'][0:3]
print(a2)
print('---------------------------------------------------')
# 4、以属性方式显示性别为“女”的人员的姓名
b1=df[df.性别=='女']['姓名']
print(b1)
print('---------------------------------------------------')
# 5、分别用loc、iloc式显示0到3行的姓名、城市列
c1=df.loc[['A','B','C'],['姓名']]
print(c1)
print('---------------------------------------------------')
c2=df.loc[['A','B','C'],['城市']]
print(c2)
print('---------------------------------------------------')
d1=df.iloc[0:3,0]
print(d1)
print('---------------------------------------------------')
d2=df.iloc[0:3,3]
print(d2)
print('---------------------------------------------------')
# 6、按前面格式,添加一条记录:就是你自己的信息,使用新索引。
myData={'姓名':'xx','性别':'男','年龄':'2000','城市':'合肥'}
# myDf=pd.DataFrame(myData,index=range(1))
# print(myDf)
# dfNew=df.append(myDf)
dfNew=df._append(myData,ignore_index=True) # .append报错,改为._append
print(dfNew)
7

# rs1:
# 1、检测是含否缺失值
# 2、对检测的“工作时间”、“小时报酬”缺失值,分别都用前项值填充和均值填充法。
# 3、对“工作时间”缺失值,用众数填充
# rs2:
# 1、检测重复值
# 2、保留第一个,删除后面的重复值,要求能实际修改。

import pandas as pd
df1=pd.read_csv(r'rs1.csv',header=0,encoding='gbk')
df2=pd.read_csv(r'rs2.csv',header=0,encoding='gbk')
# rs1:
# 1、检测是含否缺失值
print(df1.isnull())
print('---------------------------------------------------')
# 2、对检测的“工作时间”、“小时报酬”缺失值,分别都用前项值填充和均值填充法。
df11=df1.fillna(method='ffill',axis=0)
print('前项值填充:\n',df11)
print('---------------------------------------------------')
df12=df1.fillna({'工作时间':df1['工作时间'].mean(),'小时报酬':df1['小时报酬'].mean()})
print('均值填充:\n',df12)
print('---------------------------------------------------')
# 3、对“工作时间”缺失值,用众数填充
df13=df1.fillna({'工作时间':df1['工作时间'].mode()[1]}) #众数有140和160,这里取160
print('众数填充:\n',df13)
print('---------------------------------------------------')
# rs2:
# 1、检测重复值
dup1=df2.duplicated()
print(dup1)
print('---------------------------------------------------')
# 2、保留第一个,删除后面的重复值,要求能实际修改。
df21=df2.drop_duplicates()
print(df21)
print('---------------------------------------------------')
print(df2)
print('---------------------------------------------------')
df2=df2.drop_duplicates()
print(df2)
8

# 一、在axis=0上堆叠两个表,分别用内连接和外连接,堆叠结果写入“人事堆叠0-1.csv”和“人事堆叠0-2.csv”文件
# 二、在axis=1上堆叠两个表,分别用内连接和外连接,堆叠结果写入“人事堆叠1-1.csv”文件和“人事堆叠1-2.csv”文件

import pandas as pd
df1=pd.read_csv(r'rsc1.csv',header=0,encoding='gbk')
df2=pd.read_csv(r'rsc2.csv',header=0,encoding='gbk')
# 一、在axis=0上堆叠两个表,分别用内连接和外连接,堆叠结果写入“人事堆叠0-1.csv”和“人事堆叠0-2.csv”文件
d1=pd.concat([df1,df2],axis=0,join='inner')
d1.to_csv('人事堆叠0-1.csv',encoding='gbk')
d2=pd.concat([df1,df2],axis=0,join='outer')
d2.to_csv('人事堆叠0-2.csv',encoding='gbk')
# 二、在axis=1上堆叠两个表,分别用内连接和外连接,堆叠结果写入“人事堆叠1-1.csv”文件和“人事堆叠1-2.csv”文件
d3=pd.concat([df1,df2],axis=1,join='inner')
d3.to_csv('人事堆叠1-1.csv',encoding='gbk')
d4=pd.concat([df1,df2],axis=1,join='outer')
d4.to_csv('人事堆叠1-2.csv',encoding='gbk')
9

# 查询重复值:
# 1、查询所有重复值,删除重复值。
# 2、指定“姓名”列查询重复值,并删除重复值。
# 3、指定“分公司”查询重复值,并删除重复值。
# 4、说明以上三个操作不同结果的原因。

import pandas as pd
df=pd.read_csv(r'rs2.csv',header=0,encoding='gbk')
# 查询重复值:
# 1、查询所有重复值,删除重复值。
dup1=df.duplicated()
print(dup1)
print('--------------------------------------')
df1=df.drop_duplicates()
print(df1)
print('---------------------------------------------------')
# 2、指定“姓名”列查询重复值,并删除重复值。
dup2=df.duplicated(['姓名'])
print(dup2)
print('--------------------------------------')
df2=df.drop_duplicates(['姓名'])
print(df2)
print('---------------------------------------------------')
# 3、指定“分公司”查询重复值,并删除重复值。
dup3=df.duplicated(['分公司'])
print(dup3)
print('--------------------------------------')
df3=df.drop_duplicates(['分公司'])
print(df3)
print('---------------------------------------------------')
# 4、说明以上三个操作不同结果的原因
'''
对于duplicated()/drop_duplicates(),
如果 不传参数,则对 整行 进行查重,从上往下依次判断行,若 该行的全部值 与 上面的某一行的全部值 都相同则将后重复的该行标为True/进行删除;
如果 传参数,则对 该参数对应的特定列 进行查重,从上往下依次判断行,若 该行中特定列的值 与 上面的某一行中特定列的值 相同则将后重复的该行标为True/进行删除。
'''

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值