Part 2.3 pandas分组、排序和变换

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 os
import pandas as pd
import 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 time
df = df.reindex(np.random.permutation(df.index))


pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)
display(df)

Part 2.3 pandas分组、排序和变换

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

pd.set_option('display.max_columns', 7)
pd.set_option('display.max_rows', 5)


df.reset_index(inplace=True, drop=True)
display(df)

Part 2.3 pandas分组、排序和变换

数据集排序

Sorting a Data Set

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

import os
import 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

Part 2.3 pandas分组、排序和变换

数据集分组

Grouping a Data Set

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

import os
import 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)

Part 2.3 pandas分组、排序和变换

上面的数据集可以用于表现组摘要。例如,下面的代码将按平均值对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}

举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值