Pandas练习的参考代码

    针对上一节的练习问题,以下为参考代码。
    首先将数据表完整的在Python中表示出来。

import pandas as pd
from pandas import DataFrame
from pandasql import sqldf, load_meat, load_births
data={'Chinese':[66,95,95,90,80,80],'English':[65,85,92,88,90,90],'Math':[None,98,96,77,90,90]}
df=pd.DataFrame(data,index=['ZhangFei','GuanYu','ZhaoYun','HuangZhong','DianWei','DianWei'],columns=['Chinese','English','Math'])
print(df)

运行结果:

             Chinese  English  Math
ZhangFei         66       65   NaN
GuanYu           95       85  98.0
ZhaoYu           95       92  96.0
HuangZhong       90       88  77.0
DianWei          80       90  90.0
DianWei          80       90  90.0

    接下来,我们看到DianWei行重复了,因此去重复的行,以及将各科名称重命名为中文。

#去重复行
df=df.drop_duplicates()
#列名重命名
df.rename(columns={'Chinese':'语文','English':'英语','Math':'数学'},inplace=True)
print(df)

运行结果:

          语文 英语 数学
ZhangFei    66  65   NaN
GuanYu      95  85  98.0
ZhaoYu      95  92  96.0
HuangZhong  90  88  77.0
DianWei     80  90  90.0

    通过上述操作,我们看到重复的DianWei行只保留了一行,且各科目名称被改成了中文。接下来要进行数据统计,在数据统计之前,判断是否有缺失值,若存在缺失值,考虑对缺失值进行处理。

print(df.isnull().sum())#判断缺失值
print(df.isnull())#查找缺失值

运行结果:

语文    0
英语    0
数学    1
dtype: int64
            语文   英语    数学
ZhangFei    False  False   True
GuanYu      False  False  False
ZhaoYu      False  False  False
HuangZhong  False  False  False
DianWei     False  False  False

    从代码结果中看出数学列中有1个缺失值,具体位置是ZhangFei的数学成绩缺失。考虑用数学成绩的平均值进行填充。

df['数学'].fillna(df['数学'].mean(),inplace=True)#用均值填充缺失值
print(df)

运行结果:

          语文 英语 数学
ZhangFei    66  65  90.25
GuanYu      95  85  98.00
ZhaoYu      95  92  96.00
HuangZhong  90  88  77.00
DianWei     80  90  90.00

    从结果可以看到ZhangFei的数学成绩已经填充好了。下面添加总分一列,并依据总分从高到低排序。

def total_score(df):
    df[u'总分']=df[u'语文']+df[u'英语']+df[u'数学']
    return df
df=df.apply(total_score,axis=1)
print(df)
df.sort_values(['总分'],ascending=False,inplace=True)#按总分从高到低排序
print(df)

运行结果:

            语文  英语  数学    总分
ZhangFei    66.0  65.0  90.25  221.25
GuanYu      95.0  85.0  98.00  278.00
ZhaoYu      95.0  92.0  96.00  283.00
HuangZhong  90.0  88.0  77.00  255.00
DianWei     80.0  90.0  90.00  260.00
            语文  英语  数学    总分
ZhaoYu      95.0  92.0  96.00  283.00
GuanYu      95.0  85.0  98.00  278.00
DianWei     80.0  90.0  90.00  260.00
HuangZhong  90.0  88.0  77.00  255.00
ZhangFei    66.0  65.0  90.25  221.25

    从结果中看出ZhaoYun的总分最高。其实,在计算总分时还有一个更简便的方法。

df[u'总分']=df.sum(axis=1)
print(df)

运行结果:

           语文 英语 数学   总分
ZhangFei    66  65  90.25  221.25
GuanYu      95  85  98.00  278.00
ZhaoYun     95  92  96.00  283.00
HuangZhong  90  88  77.00  255.00
DianWei     80  90  90.00  260.00

    结果和上面应用apply()函数的结果一致,但代码更简洁。下面对数据进行统计。

print(df.describe())

运行结果:

          语文       英语      数学         总分
count   5.000000   5.000000   5.000000    5.000000
mean   85.200000  84.000000  90.250000  259.450000
std    12.357184  10.931606   8.196798   24.382627
min    66.000000  65.000000  77.000000  221.250000
25%    80.000000  85.000000  90.000000  255.000000
50%    90.000000  88.000000  90.250000  260.000000
75%    95.000000  90.000000  96.000000  278.000000
max    95.000000  92.000000  98.000000  283.000000

    好了,练习的代码到这里就基本结束了,关于Pandas的学习还远远没有结束。希望我们在以后的学习里多多动手实操,多多发现,多多进步。
    最后的最后,当然是宣传我的个人公众号啦:小菜鸡的技术之路。欢迎大家一起交流,一起进步啊!附上我的公众号二维码。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值