欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pandas指南-3.数据摘要与映射

程序员文章站 2024-01-24 18:31:34
...

目录

数据摘要与映射

摘要功能

映射


数据摘要与映射

import pandas as pd
pd.set_option('max_rows', 5)
import numpy as np
melbourne_data = pd.read_csv('melb_data.csv') 
melbourne_data.head()

pandas指南-3.数据摘要与映射

摘要功能

pandas提供了许多简单的“汇总函数”(不是正式名称),它以某种有用的方式重构数据。 例如,考虑describe方法:

melbourne_data.Price.describe()

pandas指南-3.数据摘要与映射

此方法生成给定列的属性的高级摘要。 它是类型感知的,这意味着它的输出根据输入的dtype而改变。 上面的输出只对数值数据有意义; 对于字符串数据,这是我们得到的:

melbourne_data.Address.describe()
count             13580
unique            13378
top       5 Margaret St
freq                  3
Name: Address, dtype: object

如果你想获得有关DataFrame或Series中的列的特定简单摘要统计信息,通常会有一个有用的pandas函数来实现它。 例如,要查看分配的点的平均值,我们可以使用平均函数mean: 

melbourne_data.Price.mean()

1075684.079455081

要查看唯一值列表,我们可以使用唯一函数unique:

melbourne_data.Address.unique()

array(['85 Turner St', '25 Bloomburg St', '5 Charles St', ...,
       '83 Power St', '96 Verdon St', '6 Agnes St'], dtype=object) 

要查看唯一值列表以及它们在数据集中出现的频率,我们可以使用value_counts方法:

melbourne_data.Address.value_counts()

5 Margaret St       3
53 William St       3
5 Charles St        3
                   ..
9 Ambon Ct          1
2/28 Caroline St    1
174 South Rd        1
Name: Address, Length: 13378, dtype: int64 

映射

“映射”是一个从数学中借用的术语,用于获取一组值并将它们“映射”到另一组值的函数。 在数据科学中,我们经常需要从现有数据创建新的表示,或者将数据从现在的格式转换为我们希望它在以后的格式。 映射是处理这项工作的地方,对于完成工作非常重要!

你经常会使用两种映射方法。 Series.map是第一个,稍微简单一点。 例如,假设我们想要将房价重新计算为现在价格减掉均值.我们可以这样做:

price_mean = melbourne_data.Price.mean()
melbourne_data.Price.map(lambda p: p - price_mean)
0        4.043159e+05
1       -4.068408e+04
2        3.893159e+05
             ...     
13577    9.431592e+04
13578    1.424316e+06
13579    2.093159e+05
Name: Price, Length: 13580, dtype: float64

传递给map的函数应该期望Series中的单个值(在上面的示例中为点值),并返回该值的转换版本。 map返回一个新Series,其中所有值都已由你的函数转换。

如果我们想要通过在每一行上调用自定义方法来转换整个DataFrame,DataFrame.apply是靠谱的方法。

def remean_price(row):
    row.Price = row.Price - price_mean
    return row
  
melbourne_data.apply(remean_price, axis='columns')

如果我们使用axis ='index'调用了reviews.apply,那么我们需要提供一个函数来转换每一列,而不是传递一个函数来转换每一行。

请注意,Series.map和DataFrame.apply分别返回新的,已转换的Series和DataFrame。 它们不会修改它们被调用的原始数据。 如果我们查看第一行房价数据,我们可以看到它仍然具有原始点值。

melbourne_data.head(1)

pandas指南-3.数据摘要与映射

pandas提供许多常见的映射操作作为内置函数。 例如,这是一种更快速的方法来重新记录我们的点列:

price_mean = melbourne_data.Price.mean()
melbourne_data.Price - price_mean
0        4.043159e+05
1       -4.068408e+04
2        3.893159e+05
             ...     
13577    9.431592e+04
13578    1.424316e+06
13579    2.093159e+05
Name: Price, Length: 13580, dtype: float64

在这段代码中,我们在左侧的许多值(Series中的所有内容)和右侧的单个值(平均值)之间执行操作。 pandas查看此表达式并指出我们必须从数据集中的每个值中减去该平均值。

如果我们在相等长度的系列之间执行这些操作,pandas也将理解该怎么做。 例如,在数据集中组合区县和地址信息的简单方法是执行以下操作:

melbourne_data.Suburb + " - " + melbourne_data.Address
0           Abbotsford - 85 Turner St
1        Abbotsford - 25 Bloomburg St
2           Abbotsford - 5 Charles St
                     ...             
13577      Williamstown - 83 Power St
13578     Williamstown - 96 Verdon St
13579         Yarraville - 6 Agnes St
Length: 13580, dtype: object

这些运算符比map或apply更快,因为它们使用内置于pandas中的加速。 所有标准Python运算符(>,<,==等)都以这种方式工作。

然而,它们并不像map或apply那样灵活,它可以做更高级的事情,比如应用条件逻辑,这不能仅通过加法和减法来完成。