×

Part 2.3 pandas分组、排序和变换

minsx minsx 发表于2021-10-12 00:00:00 浏览117 评论0

抢沙发发表评论

Applications of Deep Neural Networks with Keras

基于Keras的深度神经网络应用

著:Jeff Heaton  译:人工智能学术前沿

目录

1.Python基础

2.机器学习Python

3.TensorFlow简介

4.表格类数据的训练

5.正则化和Dropout

6.用于计算机视觉的卷积神经网络

7.生成对抗网络

8.Kaggle数据集

9.迁移学习

10.Keras的时间序列

11.自然语言处理与语音识别

12.强化学习

13.Advanced/Other Topics

14.其他神经网络技术


      2.3 分组、排序和变换    

Part 2.3: Grouping, Sorting, and Shuffling

现在我们来看看影响整个Pandas数据帧的几种方法。这些技术将允许我们对数据集进行分组、排序和变换。这些都是数据预处理和评估的基本操作。

变换数据集

Shuffling a Dataset

数据集的行顺序中可能隐藏着信息。除非您处理的是时间序列数据,否则行顺序不应该很重要。考虑一下你的训练集是否包括某家公司的员工。也许这个数据集是按员工在公司的年数排序的。可以使用单独的列来指定服务年限。但是,按照这个顺序保存数据可能会有问题。


考虑是否要将数据分割为训练和验证。最终,验证集可能只包含较新的员工,而训练集只包含较长期的员工。将数据分割成k折交叉验证可能会有类似的问题。由于这些问题,对数据集进行洗牌是很重要的。


通常,混批和重建索引是一起进行的。混排使数据集的顺序随机化。但是,它并没有改变Pandas的行号。下面的代码演示了重新混排。注意,第一列,即行索引,没有被重置。通常,这不会导致任何问题,并允许追溯到数据的原始顺序。然而,我通常更喜欢重置这个索引。我的理由是,我通常不关心初始位置,在一些实例中,这种无序索引可能会导致问题。

import osimport pandas as pdimport numpy as np
df = pd.read_csv(    "https://data.heatonresearch.com/data/t81-558/auto-mpg.csv",    na_values=['NA', '?'])
#np.random.seed(42) # Uncomment this line to get the same shuffle each timedf = df.reindex(np.random.permutation(df.index))
pd.set_option('display.max_columns', 7)pd.set_option('display.max_rows', 5)display(df)


下面的代码演示了一个重索引。请注意reindex如何对行索引进行排序。

pd.set_option('display.max_columns', 7)pd.set_option('display.max_rows', 5)
df.reset_index(inplace=True, drop=True)display(df)


数据集排序

Sorting a Data Set

虽然在训练前洗选数据集总是一个好主意,但在训练和预处理期间,您可能还希望对数据集进行排序。对数据集进行排序允许您对一个或多个列按升序或降序排列行。下面的代码按名称对MPG数据集进行排序,并显示第一辆汽车。

import osimport pandas as pd
df = pd.read_csv(    "https://data.heatonresearch.com/data/t81-558/auto-mpg.csv",    na_values=['NA', '?'])
df = df.sort_values(by='name', ascending=True)print(f"The first car is: {df['name'].iloc[0]}")      pd.set_option('display.max_columns', 7)pd.set_option('display.max_rows', 5)display(df)

The first car is: amc ambassador brougham

数据集分组

Grouping a Data Set

分组是对数据集的典型操作。结构化查询语言(SQL)将此操作称为“GROUP BY”。程序员使用分组来总结数据。因此,汇总行数通常会收缩,而且无法撤消分组。由于这种信息的丢失,在分组之前保留原始数据是非常重要的。
Auto MPG数据集用于演示分组。


import osimport pandas as pd
df = pd.read_csv(    "https://data.heatonresearch.com/data/t81-558/auto-mpg.csv",    na_values=['NA', '?'])
pd.set_option('display.max_columns', 7)pd.set_option('display.max_rows', 5)display(df)


上面的数据集可以用于表现组摘要。例如,下面的代码将按平均值对cylinders进行分组。此代码将提供分组。除了mean之外,还可以使用其他聚合函数,如sum或count。

g = df.groupby('cylinders')['mpg'].mean()g

输出

cylinders 

3    20.550000 

4    29.286765 

5    27.366667 

6    19.985714 

8    14.963107 

Name: mpg, dtype: float64


将这些平均值作为字典可能是有用的。

d = g.to_dict()d

输出

{3: 20.55, 

4: 29.28676470588236, 

 5: 27.366666666666664, 

 6: 19.985714285714284, 

 8: 14.963106796116508}

字典允许您快速访问单个元素。例如,你可以快速查找六缸汽车的平均值。您将看到,本模块后面介绍的目标编码使用了这种技术。

d[6]

输出

19.985714285714284

下面的代码显示了如何计算与每个cylinder计数匹配的行数。

df.groupby('cylinders')['mpg'].count().to_dict()

输出

{3: 4, 4: 204, 5: 3, 6: 84, 8: 103}

扫码关注我们

微信号 :AI_Frontiers

qq群:966308496

今日头条:人工智能学术前沿

知乎:人工智能学术前沿

米斯云

访客