在使用 pandas 进行数据处理时,.explode() 方法在处理 DataFrame 中的列表时常常非常实用。本教程将作为您掌握 .explode() 方法的手册,从基础机制到高级用法及常见陷阱,逐一讲解。
简要答案:.explode() 的工作原理
如果您只想快速了解,请阅读本节。.explode() 方法用于将列表型列中的条目按多个行展开,使列表中的每个元素成为单独的一行。举例来说,我们将使用下方的 DataFrame df 来演示该过程:
ID
Interests
1
['Python', 'Data Science']
2
['Machine Learning', 'AI']
.explode() 方法会将 Interests 列的元素展开,如下所示:
exploded_df = df. explode( 'Interests' ) 技术支持
ID
Interests
1
Python
1
Data Science
2
Machine Learning
2
AI
什么是 Pandas 的 .explode() 方法?
.explode() 方法旨在简化对嵌套数据(如 列表 或 元组 )的处理。通过将列表状结构中的每个元素转换为单独一行,.explode() 提升了数据的可访问性与可分析性。
.explode() 方法如何工作?
.explode() 的功能既强大又直观,旨在提升数据处理任务的易用性与效率。
Column:指定要展开的、包含列表型条目的列。
ignore_index:当设为 True 时,会将索引重置为默认的整数索引,有助于在展开后保持 DataFrame 的完整性。默认值为 False。
使用 Pandas .explode() 的两种方式
在 Pandas 中展开单列
最常见的用法是展开单个列,将其中每个列表型条目扩展为独立的行。在简要答案一节我们已经演示过,下面再来回顾该示例。这里有一个 DataFrame df,包含个人的 ID 及其学习兴趣。可以看到,学习兴趣以列表形式存储。
ID
Interests
1
['Python', 'Data Science']
2
['Machine Learning', 'AI']
.explode() 方法会将 Interests 列的元素展开为独立行,如下所示:
exploded_df = df. explode( 'Interests' ) 技术支持
ID
Interests
1
Python
1
Data Science
2
Machine Learning
2
AI
该方法对包含分类数据或每条观测具有多个属性的列尤为有用。
在 Pandas 中展开多列
您也可能需要在一个 DataFrame 中同时展开多列。这在多个列包含需同时解包的列表型结构时非常有用。我们为 df 添加一个 Tools 列来演示:
ID
Interests
Tools
1
['Python', 'Data Science']
['Pandas', 'NumPy']
2
['Machine Learning', 'AI']
['Scikit-learn', 'TensorFlow']
要展开多列,只需将要展开的列以列表形式传入即可
exploded_df = df. explode( [ 'Interests' , 'Tools' ] ) 技术支持
ID
Interests
Tools
1
Python
Pandas
1
Data Science
NumPy
2
Machine Learning
Scikit-learn
2
AI
TensorFlow
该方法在处理包含列表的多列时尤为实用。不过,使用 .explode() 时也可能遇到一些陷阱,下一节将进行说明。
使用 Pandas .explode() 的常见错误与解决方案
重复列被展开
使用 .explode() 时,一个常见陷阱是误将重复的列名一并展开。请务必确保传入的列名列表中不含重复项!
df. explode( [ 'Interests' , 'Tools' , 'Interests' ] )
df. explode( [ 'Interests' , 'Tools' ] ) 技术支持
展开看起来像列表的字符串
很多时候,DataFrame 中的某些行是字符串 ,但它们看起来像列表。尝试对形如 "['Python', 'AI']" 的字符串进行展开不会产生变化,因为 .explode() 期望的是实际的列表型对象,而不是看起来像列表的字符串。下面给出可能的情形及其解决方案。假设 df 的取值如下:
ID
Interests
1
"['Python', 'Data Science']"
2
"['Machine Learning', 'AI']"
可以看到,Interests 列的值是看起来像列表的字符串。对 Interests 使用 .explode() 不会有任何变化,因为这些值只是单个字符串。为了解决该问题,我们将 Interests 的值转换为列表。
import ast
df[ 'Interests' ] = df[ 'Interests' ] . apply ( ast. literal_eval)
exploded_df = df. explode( 'Interests' )
print ( exploded_df) 技术支持
多列中列表长度不一致
在处理 pandas DataFrame 时,常见陷阱之一是:要展开的多列中,某些行的列表长度不一致。这会导致对多列使用 .explode() 后,数据错位或不完整。举例来说,假设 df 如下:
ID
Interests
Tools
1
['Python', 'Data Science']
['Pandas']
2
['Machine Learning']
['Scikit-learn', 'TensorFlow']
如上所示,Interests 与 Tools 列中的列表长度不同。直接对这些列使用 .explode() 会报错,因为各列的列表长度必须一致。要解决该问题,可使用自定义函数用 None 进行填充,如下:
def pad_lists ( row) :
max_len = max ( len ( row[ 'Interests' ] ) , len ( row[ 'Tools' ] ) )
row[ 'Interests' ] += [ None ] * ( max_len - len ( row[ 'Interests' ] ) )
row[ 'Tools' ] += [ None ] * ( max_len - len ( row[ 'Tools' ] ) )
return row
df = df. apply ( pad_lists, axis= 1 )
df. explode( [ 'Interests' , 'Tools' ] ) 技术支持
ID
Interests
Tools
1
Python
Pandas
1
Data Science
None
2
Machine Learning
Scikit-learn
2
None
TensorFlow
结语
总之,.explode() 方法在将值列表解包为 Pandas DataFrame 的多行时非常有用。若想进一步学习 pandas,请参考以下资源:
在使用 pandas 进行数据处理时,
.explode()方法在处理 DataFrame 中的列表时常常非常实用。本教程将作为您掌握 .explode() 方法的手册,从基础机制到高级用法及常见陷阱,逐一讲解。简要答案:
.explode()的工作原理如果您只想快速了解,请阅读本节。.explode() 方法用于将列表型列中的条目按多个行展开,使列表中的每个元素成为单独的一行。举例来说,我们将使用下方的 DataFrame df 来演示该过程:
ID
Interests
1
['Python', 'Data Science']
2
['Machine Learning', 'AI']
.explode()方法会将Interests列的元素展开,如下所示:ID
Interests
1
Python
1
Data Science
2
Machine Learning
2
AI
什么是 Pandas 的
.explode()方法?.explode()方法旨在简化对嵌套数据(如 列表 或 元组)的处理。通过将列表状结构中的每个元素转换为单独一行,.explode() 提升了数据的可访问性与可分析性。.explode()方法如何工作?.explode()的功能既强大又直观,旨在提升数据处理任务的易用性与效率。Column:指定要展开的、包含列表型条目的列。ignore_index:当设为True时,会将索引重置为默认的整数索引,有助于在展开后保持 DataFrame 的完整性。默认值为False。使用 Pandas
.explode()的两种方式在 Pandas 中展开单列
最常见的用法是展开单个列,将其中每个列表型条目扩展为独立的行。在简要答案一节我们已经演示过,下面再来回顾该示例。这里有一个 DataFrame
df,包含个人的 ID 及其学习兴趣。可以看到,学习兴趣以列表形式存储。ID
Interests
1
['Python', 'Data Science']
2
['Machine Learning', 'AI']
.explode()方法会将Interests列的元素展开为独立行,如下所示:ID
Interests
1
Python
1
Data Science
2
Machine Learning
2
AI
该方法对包含分类数据或每条观测具有多个属性的列尤为有用。
在 Pandas 中展开多列
您也可能需要在一个 DataFrame 中同时展开多列。这在多个列包含需同时解包的列表型结构时非常有用。我们为
df添加一个Tools列来演示:ID
Interests
Tools
1
['Python', 'Data Science']
['Pandas', 'NumPy']
2
['Machine Learning', 'AI']
['Scikit-learn', 'TensorFlow']
要展开多列,只需将要展开的列以列表形式传入即可
ID
Interests
Tools
1
Python
Pandas
1
Data Science
NumPy
2
Machine Learning
Scikit-learn
2
AI
TensorFlow
该方法在处理包含列表的多列时尤为实用。不过,使用
.explode()时也可能遇到一些陷阱,下一节将进行说明。使用 Pandas
.explode()的常见错误与解决方案重复列被展开
使用
.explode()时,一个常见陷阱是误将重复的列名一并展开。请务必确保传入的列名列表中不含重复项!展开看起来像列表的字符串
很多时候,DataFrame 中的某些行是字符串,但它们看起来像列表。尝试对形如
"['Python', 'AI']"的字符串进行展开不会产生变化,因为.explode()期望的是实际的列表型对象,而不是看起来像列表的字符串。下面给出可能的情形及其解决方案。假设df的取值如下:ID
Interests
1
"['Python', 'Data Science']"
2
"['Machine Learning', 'AI']"
可以看到,
Interests列的值是看起来像列表的字符串。对Interests使用.explode()不会有任何变化,因为这些值只是单个字符串。为了解决该问题,我们将Interests的值转换为列表。多列中列表长度不一致
在处理 pandas DataFrame 时,常见陷阱之一是:要展开的多列中,某些行的列表长度不一致。这会导致对多列使用
.explode()后,数据错位或不完整。举例来说,假设df如下:ID
Interests
Tools
1
['Python', 'Data Science']
['Pandas']
2
['Machine Learning']
['Scikit-learn', 'TensorFlow']
如上所示,
Interests与Tools列中的列表长度不同。直接对这些列使用.explode()会报错,因为各列的列表长度必须一致。要解决该问题,可使用自定义函数用None进行填充,如下:ID
Interests
Tools
1
Python
Pandas
1
Data Science
None
2
Machine Learning
Scikit-learn
2
None
TensorFlow
结语
总之,
.explode()方法在将值列表解包为 Pandas DataFrame 的多行时非常有用。若想进一步学习 pandas,请参考以下资源: