Pandas行转列的4大秘笈,数据处理更轻松!
2023-09-04 20:31:05
引言
数据分析中,数据处理是一个至关重要的环节。Pandas作为Python中强大的数据处理库,提供了丰富的函数和方法,其中行列转换是数据处理中必不可少的技巧之一。本文将为您介绍Pandas中4种常用的行列转换技巧,帮助您轻松高效地处理和转换数据。
1. melt:将宽表转换为长表
melt函数用于将宽表(多个列存储不同类别数据)转换为长表(每个类别数据存储在单独的列中)。语法如下:
df_long = pd.melt(df, id_vars=["列名"], value_vars=["列名", "列名", ...])
其中,id_vars
指定不变的列(作为索引列),value_vars
指定需要转换的列。
2. transpose(T)或 transpose:将行转换为列
transpose函数(或T属性)用于将数据框的行和列进行互换。语法如下:
df_T = df.T
或
df_T = df.transpose()
3. wide_to_long:将多个宽表连接成一个长表
wide_to_long函数用于将多个宽表连接成一个长表。语法如下:
df_long = pd.wide_to_long(df, stubnames=["列名前缀"], i=["索引列名"], j=["列名"], sep="_")
其中,stubnames
指定新列名前缀,i
指定索引列,j
指定新列名,sep
指定分隔符。
4. explode:将列表或数组元素拆分成行
explode函数用于将列表或数组元素拆分成单独的行。语法如下:
df_exploded = df["列名"].explode()
其中,列名
指定包含列表或数组元素的列。
实例
假设我们有一个如下所示的宽表:
df = pd.DataFrame({
"Name": ["John", "Jane", "Peter"],
"Age": [25, 30, 28],
"Hobbies": [["篮球", "足球"], ["唱歌", "跳舞"], ["编程", "游戏"]]
})
使用melt函数将宽表转换为长表:
df_long = df.melt(id_vars=["Name"], value_vars=["Age", "Hobbies"])
结果:
Name variable value
0 John Age 25
1 Jane Age 30
2 Peter Age 28
3 John Hobbies 篮球
4 John Hobbies 足球
5 Jane Hobbies 唱歌
6 Jane Hobbies 跳舞
7 Peter Hobbies 编程
8 Peter Hobbies 游戏
使用transpose函数将行转换为列:
df_T = df.T
结果:
John Jane Peter
Age 25 30 28
Hobbies [篮球, 足球] [唱歌, 跳舞] [编程, 游戏]
使用wide_to_long函数将多个宽表连接成一个长表:
df1 = pd.DataFrame({
"Name": ["John", "Jane"],
"Age": [25, 30],
"Hobby1": ["篮球", "唱歌"]
})
df2 = pd.DataFrame({
"Name": ["John", "Jane"],
"Age": [25, 30],
"Hobby2": ["足球", "跳舞"]
})
df_long = pd.wide_to_long([df1, df2], stubnames=["Hobby"], i="Name", j="Hobby", sep="_")
结果:
Name Hobby_Hobby1 Hobby_Hobby2
0 John 篮球 足球
1 Jane 唱歌 跳舞
使用explode函数将列表或数组元素拆分成行:
df["Hobbies_Exploded"] = df["Hobbies"].explode()
结果:
Name Age Hobbies Hobbies_Exploded
0 John 25 [篮球, 足球] 篮球
1 John 25 [篮球, 足球] 足球
2 Jane 30 [唱歌, 跳舞] 唱歌
3 Jane 30 [唱歌, 跳舞] 跳舞
4 Peter 28 [编程, 游戏] 编程
5 Peter 28 [编程, 游戏] 游戏
结论
通过掌握Pandas中这4种行列转换技巧,您可以轻松高效地处理和转换数据。这些技巧可以帮助您解决各种数据处理任务,例如数据重塑、数据合并和数据拆分。熟练掌握这些技巧将大大提升您的数据分析能力,让您从繁琐的数据处理任务中解放出来,专注于洞察的发现和决策制定。