栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Pandas基础练习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pandas基础练习

import pandas as pd
import numpy as np
from pandas import Dataframe

============================================

练习1:

使用多种方法创建以下Series,命名为s1:
语文 150
数学 150
英语 150
理综 300

============================================

# 列表创建
pd.Series(data=[150,150,150,300],index=['语文','数学','英语','理综'],name='s1')
语文    150
数学    150
英语    150
理综    300
Name: s1, dtype: int64
# 字典创建
dicts={'语文':150,'数学':150,'英语':150,'理综':300,}
s1=pd.Series(data=dicts,name='s1')
s1
语文    150
数学    150
英语    150
理综    300
Name: s1, dtype: int64

============================================

练习2:

使用多种方法对练习1创建的Series s1进行索引和切片:

索引:
数学 150

切片:
语文 150
数学 150
英语 150

============================================

s1.loc['数学']
150
s1.iloc[1]
150
s1[1]
150
s1['数学']
150
s1.values
array([150, 150, 150, 300], dtype=int64)
s1.keys()
Index(['语文', '数学', '英语', '理综'], dtype='object')
print(s1[:3])
语文    150
数学    150
英语    150
Name: s1, dtype: int64
s1[-2::-1]
英语    150
数学    150
语文    150
Name: s1, dtype: int64

============================================

练习3:

  1. 想一想Series运算和ndarray运算的规则有什么不同?

  2. 新建另一个索引包含“文综”的Series s2,并与s2进行多种算术操作。思考如何保存所有数据。

============================================

1.由于pandas的底层是集成了numpy,因此Series的底层数据就是使用ndarray来构建的,因此我们得到了一个Series后,就可以使用numpy中的函数,对数据进行操作。但是Series与ndarry不同的地方在于,Series中多了一个索引。

这些问题都是细节问题,只有熟悉了这些细节知识,对于我们熟练使用numpy和pandas都是由很大帮助的。Series的底层数据就是由ndarray来构建的,而Dataframe又是由一个个的Series堆积而成的,随意取出Dataframe每一行或者每一列数据,都是一个Series。

2.新建另一个索引包含“文综”的Series s2,并与s2进行多种算术操作。

s2=pd.Series(data=np.random.randint(100,150,size=5),index=['语文','数学','英语','理综','文综'],name='s2')
s2
语文    144
数学    103
英语    113
理综    115
文综    105
Name: s2, dtype: int32
s1
语文    150
数学    150
英语    150
理综    300
Name: s1, dtype: int64
s1+s2 # Pandas进行数据运算时,会按照索引进行一一对应,对应后进行相应的算术运算,没有对齐的位置就会用NaN进行填充。
数学    253.0
文综      NaN
理综    415.0
英语    263.0
语文    294.0
dtype: float64
# add函数就是指是s1+s2。对于s1来说,没有文综列,由于使用的是fill_value = 0,因此用 “0”来填充df1的e列,105+0=105
s1.add(s2,fill_value=0) # 加
数学    253.0
文综    105.0
理综    415.0
英语    263.0
语文    294.0
dtype: float64
s1*s2
数学    15450.0
文综        NaN
理综    34500.0
英语    16950.0
语文    21600.0
dtype: float64
s1.mul(s2,fill_value=1) # 乘
数学    15450.0
文综      105.0
理综    34500.0
英语    16950.0
语文    21600.0
dtype: float64
s1-s2
数学     47.0
文综      NaN
理综    185.0
英语     37.0
语文      6.0
dtype: float64
s1.sub(s2,fill_value=0) # 减
数学     47.0
文综   -105.0
理综    185.0
英语     37.0
语文      6.0
dtype: float64
s1/s2
数学    1.456311
文综         NaN
理综    2.608696
英语    1.327434
语文    1.041667
dtype: float64
s1.div(s2,fill_value=1) # 除
数学    1.456311
文综    0.009524
理综    2.608696
英语    1.327434
语文    1.041667
dtype: float64
s1//s2
数学    1.0
文综    NaN
理综    2.0
英语    1.0
语文    1.0
dtype: float64
s1.floordiv(s2,fill_value=1) #整除
数学    1.0
文综    0.0
理综    2.0
英语    1.0
语文    1.0
dtype: float64
s1%s2
数学    47.0
文综     NaN
理综    70.0
英语    37.0
语文     6.0
dtype: float64
s1.mod(s2,fill_value=0) # 取余
数学    47.0
文综     NaN
理综    70.0
英语    37.0
语文     6.0
dtype: float64
s2**s1
数学    8.425268e+301
文综              NaN
理综              inf
英语    9.157281e+307
语文              inf
dtype: float64
s2.pow(s1,fill_value=0) # 次幂
数学    8.425268e+301
文综     1.000000e+00
理综              inf
英语    9.157281e+307
语文              inf
dtype: float64

============================================

练习4:

根据以下考试成绩表,创建一个Dataframe,命名为df:

    张三  李四
语文 150  0
数学 150  0
英语 150  0
理综 300  0

============================================

df=Dataframe({'张三':[150,150,150,300],'李四':[0,0,0,0]},index=['语文','数学','英语','理综'])
df
张三李四
语文1500
数学1500
英语1500
理综3000
df=pd.Dataframe({'张三':[150,150,150,300],'李四':[0,0,0,0]},index=['语文','数学','英语','理综'])
df
张三李四
语文1500
数学1500
英语1500
理综3000

============================================

练习5:

使用多种方法对ddd进行索引和切片,并比较其中的区别

============================================

# 通过列名取值
df.张三
语文    150
数学    150
英语    150
理综    300
Name: 张三, dtype: int64
df.李四
语文    0
数学    0
英语    0
理综    0
Name: 李四, dtype: int64
df['张三']
语文    150
数学    150
英语    150
理综    300
Name: 张三, dtype: int64
df[['张三','李四']]
张三李四
语文1500
数学1500
英语1500
理综3000
# 通过行名取值
df.loc['语文'] 
张三    150
李四      0
Name: 语文, dtype: int64
df.loc[['语文','数学']] # loc 全封闭,左闭右闭
张三李四
语文1500
数学1500
df.loc['语文':'理综']
张三李四
语文1500
数学1500
英语1500
理综3000
df.iloc[3] 
张三    300
李四      0
Name: 理综, dtype: int64
df.iloc[0:4] # iloc里面必须是数字  iloc 半闭合,左闭右开
张三李四
语文1500
数学1500
英语1500
理综3000
df.iloc[0,1] # 第一行第二列的值
0

============================================

练习6:

  1. 假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。

  2. 假设张三期中考试数学被发现作弊,要记为0分,如何实现?

  3. 李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?

  4. 后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?

============================================

ddd=pd.Dataframe(data=np.random.randint(90,150,size=(3,4)),index=['张三','李四','王五'],columns=['语文','英语','数学','python'])
ddd
语文英语数学python
张三141144102127
李四140128110135
王五1029392135
ddd2=pd.Dataframe(data=np.random.randint(90,150,size=(4,5)),index=['张三','李四','王五','刘六'],columns=['语文','英语','数学','python','java'])
ddd2
语文英语数学pythonjava
张三9490115141113
李四97127137127125
王五144123104105101
刘六109104129112147
  1. 假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
ddd+ddd2
javapython数学英语语文
刘六NaNNaNNaNNaNNaN
张三NaN268.0217.0234.0235.0
李四NaN262.0247.0255.0237.0
王五NaN240.0196.0216.0246.0
sums=ddd.add(ddd2,fill_value=0)
sums
javapython数学英语语文
刘六147.0112.0129.0104.0109.0
张三113.0268.0217.0234.0235.0
李四125.0262.0247.0255.0237.0
王五101.0240.0196.0216.0246.0
ddd.mean()
语文        127.666667
英语        121.666667
数学        101.333333
python    132.333333
dtype: float64
ddd2.mean()
语文        111.00
英语        111.00
数学        121.25
python    121.25
java      121.50
dtype: float64
sums.mean()
java      121.50
python    220.50
数学        197.25
英语        202.25
语文        206.75
dtype: float64
sums.mean(axis=0)
java      121.50
python    220.50
数学        197.25
英语        202.25
语文        206.75
dtype: float64
sums.mean(axis=1)
刘六    120.2
张三    213.4
李四    225.2
王五    199.8
dtype: float64
  1. 假设张三期中考试数学被发现作弊,要记为0分,如何实现?
ddd
语文英语数学python
张三1411440127
李四240228210235
王五1029392135
ddd.loc['张三','数学']=0
ddd
语文英语数学python
张三1411440127
李四240228210235
王五1029392135
  1. 李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
ddd.loc['李四'] =ddd.loc['李四']+100 # 需要重新赋值
ddd
语文英语数学python
张三1411440127
李四240228210235
王五1029392135
ddd.loc['李四'].add(100.0) # 没有写入ddd中
语文        340.0
英语        328.0
数学        310.0
python    335.0
Name: 李四, dtype: float64
ddd
语文英语数学python
张三1411440127
李四240228210235
王五1029392135
  1. 后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
ddd
语文英语数学python
张三1411440127
李四240228210235
王五1029392135
ddd=ddd+10
ddd
语文英语数学python
张三15115410137
李四250238220245
王五112103102145
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306418.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号