参考来源: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.数据摘要与映射