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

这篇文章中使用的数据集是一个足球球员各项技能及其身价的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())
<class 'pandas.core.frame.DataFrame'>
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://yq.aliyun.com/articles/567316

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。