资讯专栏INFORMATION COLUMN

Pandas使用DataFrame进行数据分析比赛进阶之路(一)

yeooo / 2415人阅读

摘要:按照某一列的数值进行排序后输出。根据国籍这一列的属性进行分组,然后分别计算相同国籍的潜力的平均值。值得注意的是,在分组函数后面使用一个函数可以返回带有分组大小的结果。

这篇文章中使用的数据集是一个足球球员各项技能及其身价的csv表,包含了60多个字段。数据集下载链接:数据集

1、DataFrame.info()

这个函数可以输出读入表格的一些具体信息。这对于加快数据预处理非常有帮助。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("dataset/soccer/train.csv")
print(data.info())

RangeIndex: 10441 entries, 0 to 10440
Data columns (total 65 columns):
id                          10441 non-null int64
club                        10441 non-null int64
league                      10441 non-null int64
birth_date                  10441 non-null object
height_cm                   10441 non-null int64
weight_kg                   10441 non-null int64
nationality                 10441 non-null int64
potential                   10441 non-null int64
                   ...
dtypes: float64(12), int64(50), object(3)
memory usage: 5.2+ MB
None
2、DataFrame.query()
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("dataset/soccer/train.csv")
print(data.query("lw>cf"))      # 这两个方法是等价的
print(data[data.lw > data.cf])  # 这两个方法是等价的
3、DataFrame.value_counts()

这个函数可以统计某一列中不同值出现的频率。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("dataset/soccer/train.csv")
print(data.work_rate_att.value_counts())
Medium    7155
High      2762
Low        524
Name: work_rate_att, dtype: int64
4、DataFrame.sort_values()

按照某一列的数值进行排序后输出。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("dataset/soccer/train.csv")
print(data.sort_values(["sho"]).head(5))
5、DataFrame.groupby()

根据国籍(nationality)这一列的属性进行分组,然后分别计算相同国籍的潜力(potential)的平均值。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("dataset/soccer/train.csv")
potential_mean = data["potential"].groupby(data["nationality"]).mean().head(5)
print(potential_mean)
nationality
1    74.945338
2    72.914286
3    67.892857
4    69.000000
5    70.024242
Name: potential, dtype: float64

根据国籍(nationality),俱乐部(club)这两列的属性进行分组,然后分别计算球员潜力(potential)的平均值。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("dataset/soccer/train.csv")
potential_mean = data["potential"].head(20).groupby([data["nationality"], data["club"]]).mean()
print(potential_mean)
nationality  club
1            148     76
             461     72
5            83      64
29           593     68
43           213     67
51           258     62
52           112     68
54           604     81
63           415     70
64           359     74
78           293     73
90           221     70
96           80      72
101          458     67
111          365     64
             379     83
             584     65
138          9       72
155          543     72
163          188     71
Name: potential, dtype: int64

值得注意的是,在分组函数后面使用一个size()函数可以返回带有分组大小的结果。

potential_mean = data["potential"].head(200).groupby([data["nationality"], data["club"]]).size()
nationality  club
1            148     1
43           213     1
51           258     1
52           112     1
54           604     1
78           293     1
96           80      1
101          458     1
155          543     1
163          188     1
Name: potential, dtype: int64
6、DataFrame.agg()

这个函数一般在groupby函数之后使用。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("dataset/soccer/train.csv")
potential_mean = data["potential"].head(10).groupby(data["nationality"]).agg(["max", "min"])
print(potential_mean)
            max  min
nationality          
1             76   76
43            67   67
51            62   62
52            68   68
54            81   81
78            73   73
96            72   72
101           67   67
155           72   72
163           71   71
7、DataFrame.apply()

将某一个函数应用到某一列或者某一行上,可以极大加快处理速度。

import pandas as pd
import matplotlib.pyplot as plt


#  返回球员出生日期中的年份
def birth_date_deal(birth_date):
    year = birth_date.split("/")[2]
    return year

data = pd.read_csv("dataset/soccer/train.csv")
result = data["birth_date"].apply(birth_date_deal).head() 
print(result)
0    96
1    84
2    99
3    88
4    80
Name: birth_date, dtype: object

当然如果使用lambda函数的话,代码会更加简洁:

data = pd.read_csv("dataset/soccer/train.csv")
result = data["birth_date"].apply(lambda x: x.split("/")[2]).head()
print(result)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44680.html

相关文章

  • 数据比赛步——数据分析

    摘要:这里遇到的一个情况,是我在里绘制图像,发现里面的中文是乱码,查了下原因,发现得加上下面这两行,愉快解决,记录一下。 前言 大家好,我是机器学习领域的新手,最近新开了《从零开始的机器学习之旅》专栏,希望能与大家共同进步,如有错误和意见请不吝指出,谢谢。 最近看了一些比赛code,也自己试着提交了一下,真正体验到比赛的乐趣。但是,光看代码提高不了比赛能力,总结才是王道。所以我打算做一个系列...

    LeviDing 评论0 收藏0
  • 数据比赛步——数据分析

    摘要:这里遇到的一个情况,是我在里绘制图像,发现里面的中文是乱码,查了下原因,发现得加上下面这两行,愉快解决,记录一下。 前言 大家好,我是机器学习领域的新手,最近新开了《从零开始的机器学习之旅》专栏,希望能与大家共同进步,如有错误和意见请不吝指出,谢谢。 最近看了一些比赛code,也自己试着提交了一下,真正体验到比赛的乐趣。但是,光看代码提高不了比赛能力,总结才是王道。所以我打算做一个系列...

    KevinYan 评论0 收藏0
  • 数据游戏」:使用 ARIMA 算法预测三日后招商银行收盘价

    摘要:作者天琼,数据游戏优胜队伍成员介绍本文整理记录了参与的一次小型数据分析竞赛数据游戏,竞赛目标是预测年月日股闭市时招商银行的股价。日发现的数据有错误,需要手工矫正日该数据恢复正常。而函数,是对样本外的数据进行预测。 作者:天琼,「数据游戏」优胜队伍成员 介绍 本文整理记录了参与的一次小型数据分析竞赛「数据游戏」,竞赛目标是预测2019年5月15日A股闭市时招商银行600036的股价。 主...

    xcc3641 评论0 收藏0
  • 数据游戏」:使用 ARIMA 算法预测三日后招商银行收盘价

    摘要:作者天琼,数据游戏优胜队伍成员介绍本文整理记录了参与的一次小型数据分析竞赛数据游戏,竞赛目标是预测年月日股闭市时招商银行的股价。日发现的数据有错误,需要手工矫正日该数据恢复正常。而函数,是对样本外的数据进行预测。 作者:天琼,「数据游戏」优胜队伍成员 介绍 本文整理记录了参与的一次小型数据分析竞赛「数据游戏」,竞赛目标是预测2019年5月15日A股闭市时招商银行600036的股价。 主...

    Nino 评论0 收藏0
  • Python 数据分析pandas 进阶()

    摘要:所处理的数组是方法可以对指定轴上的索引进行改变增加删除操作,这将返回原始数据的一个拷贝去掉包含缺失值的行对缺失值进行填充对数据进行布尔填充五合并提供了大量的方法能够轻松的对和对象进行各种符合各种逻辑关系的合并操作。 导入本篇中使用到的模块: import numpy as np import pandas as pd from pandas import Ser...

    red_bricks 评论0 收藏0

发表评论

0条评论

yeooo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<