Vitu课堂:数据处理【瑞士军刀pandas指南】:3.数据摘要与映射

参考来源:Vitu.AI

数据摘要与映射

importpandasaspdpd.set_option('max_rows',5)importnumpyasnpmelbourne_data = pd.read_csv('melb_data.csv') melbourne_data.head()

摘要功能

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

melbourne_data.Price.describe()

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

melbourne_data.Address.describe()

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

melbourne_data.Price.mean()

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

melbourne_data.Address.unique()

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

melbourne_data.Address.value_counts()

映射

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

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

price_mean = melbourne_data.Price.mean()melbourne_data.Price.map(lambdap: p - price_mean)

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

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

defremean_price(row):row.Price = row.Price - price_meanreturnrow  melbourne_data.apply(remean_price, axis='columns')

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

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

melbourne_data.head(1)

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

price_mean = melbourne_data.Price.mean()

melbourne_data.Price - price_mean

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

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

melbourne_data.Suburb + " - " + melbourne_data.Address

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

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

原文地址:数据处理【瑞士军刀pandas指南】:3.数据摘要与映射

你可能感兴趣的