欢迎阅读关于Pandas高级数据操作的专栏!在本文中,我们将深入探讨一些在Python中用于操作和转换数据的强大且实用的函数。从数据汇总到合并再到重塑,这些功能将帮助您将数据分析技能提升到一个新的水平。无论您是久经沙场的老司机(🤭其实是经验丰富的程序员啦(✺ω✺)),还是初入数据海洋找不到方向的雏鸟(新手啦😳),本文都将为您提供一些新颖且有用的知识。那么,话不多说,让我们直接开始吧!
explode()英文翻译过来就是爆炸、激增的意思。所以顾名思义,explode()函数可以用于将列表或数组列转换为多行,也就是可以将一行变多行。
例如,如果DataFrame具有包含值列表的列,则在该列上调用explode()将为列表中的每个值创建一行新行。新行其他列的值与原始行相同,但爆炸的列则是列表中的单个值。
import pandas as pd
# 创建一个简单的样本数据
df = pd.DataFrame({'姓名': ['杰克', '史密斯'],
'物品': [['手机', '电脑', 'iPad'], ['跑车', '摩托']]})
# 使用 explode 函数将“物品”列转换为多行
df_explode = df.explode('物品')
# df
df_explode
implodeexplode()函数的逆函数不是称为"implode",而是可以使用groupby和agg函数来实现类似的功能。以下是一个示例,演示如何使用它们将多行"implode"为一个具有值列表的单元格。
# 对“姓名”列进行分组,然后对“物品”列使用魔法函数将其聚合为列表
df_implode = df_explode.groupby('姓名', as_index=False).agg(lambda x: x.tolist())
# df_explode
df_implode
melt()melt 函数通过解透视(列转行)的方式对 DataFrame 进行重塑。在需要将宽格式(列多行少)的数据转换为长格式(行多列少)时,这种方法非常有用。
import pandas as pd
# 创建样本数据
data = {'name': ['Jack', 'John'], 'Item1': ['apple', 'banana'],
'Item2': ['pear', 'orange'], 'Item3': ['car', 'bike']}
df = pd.DataFrame(data)
# 使用 melt 函数对数据框进行重塑
df_melt = df.melt(id_vars='name', value_vars=['Item1', 'Item2', 'Item3'],
var_name='Item Type', value_name='Item Name')
# df
df_melt
pivot_table()pivot_table函数用于根据DataFrame创建数据透视表。它适用于处理具有一个或多个分类变量的大量值的数据,以及创建显示这些分类数据分布的摘要表。
例如,我们有如下所示的输入数据框:
我们想要查找每位顾客购买的每种商品的数量,以便每种商品都成为一列。这个时候就可以使用数据透视表来实现这种转换。
import pandas as pd
# 创建样本数据
data = {'Name': ['John', 'Jack', 'John', 'Jack'],
'Item': ['apple', 'banana', 'car', 'bike'],
'Quantity': [1, 3, 4, 5]}
df = pd.DataFrame(data)
# 使用 pivot_table 函数创建透视表
df_pivot_table = df.pivot_table(index='Name', columns='Item',
values='Quantity', aggfunc='sum')
# df
df_pivot_table
stack()stack函数通过将列标签的最内层移动为行标签的最内层,从而更改DataFrame的形状。
# 使用 stack 函数修改透视表的形状
df_stack = df_pivot_table.stack()
# df_pivot_table
df_stack
unstack()unstack函数通过将最内层索引移动到列来更改DataFrame的形状。
# 使用 unstack 函数修改堆叠表的形状
df_unstack = df_stack.unstack()
# df
df_unstack
crosstab()crosstab 函数用于计算两个或多个因子的简单交叉表(频率表),它是 pivot_table 的特例。
df = pd.DataFrame({'gender': ['Male', 'Female', 'Female', 'Male'],
'project': ['Yes', 'No', 'Yes', 'No']})
df_crosstab = pd.crosstab(index=df['gender'], columns=df['project'])
# df
df_crosstab
cut() and qcut()pandas中的 cut() 和 qcut() 函数用于将连续数据分成离散区间或箱。cut() 函数用于将连续数据分割成大小相等的箱子,而 qcut() 用于将连续数据分割成观测值数量相等的箱子。
以下是如何使用 cut() 和 qcut() 函数对连续数据列进行分箱的示例:
import pandas as pd
import numpy as np
# 创建样本数据
df = pd.DataFrame({'Quantity': np.arange(10) + 1})
# 使用 cut 函数将“Quantity”列分为3个箱子
bins = [0, 3, 6, 10]
df['Quantity_cut'] = pd.cut(df['Quantity'], bins=bins)
# 使用 qcut 函数将“Quantity”列分为3个观测值数量相等的箱子
df['Quantity_qcut'] = pd.qcut(df['Quantity'], q=3)
df
eval()用于高效的 DataFrame 列运算,支持更快的计算速度,并可以简化链式操作。
import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.random.randint(1, 51, size=(5000000, 4)), columns=list('abcd'))
df.eval('e = (a + b) / (c + d)', inplace=True)
df
apply()对 DataFrame 中的数据应用一个函数,可以作用于行或列。
map()对DataFrame的每个元素应用一个函数,主要用于元素级函数应用。
rolling()提供滚动窗口计算,常用于时间序列数据分析,如滚动平均、滚动标准差等。
import pandas as pd
import numpy as np
# 创建样本数据
df = pd.DataFrame({'Quantity': np.arange(10) + 1})
df['rolling_avg'] = df['Quantity'].rolling(window=3).mean()
df
在这篇文章中,我们介绍了 12 个pandas高级数据操作函数,可以帮助您快速进行数据分析。我们可以使用这些函数对数据集进行有效地格式化和总结。
“如果你觉得这篇文章对你有用,请“点赞➕关注”支持我!关注我,带你解锁更多Python实用技能、数据分析知识以及更多AI工具和新玩法!
Thank you for reading!
- END -
推荐阅读👇👇👇
模拟现实:利用Python的Faker库生成逼真的测试数据,一个超实用的Python库!
原文作者:数据派探险家;如有侵权,请联系管理员删除。