调用Excel/CSV文件时Pandas explode函数无法正常工作求助
Pandas explode函数读取Excel后不生效的问题分析与解决
问题场景
执行以下代码后,生成的output2.xlsx数据和输入完全一致,explode未生效:
import pandas as pd import os os.getcwd() os.chdir('C:/Users/nick/Documents/Python') # NOTE csv_filepath df= pd.read_excel('output1.xlsx', usecols=['PartNumber', 'RefList'], index_col=False) print(df.explode('RefList')) file_name ='output2.xlsx' df.to_excel(file_name)
输入文件output1.xlsx的数据:
| PartNumber | RefList |
|---|---|
| ram | apple,orange |
| ravi | banan,pinapple |
但使用构造的含列表类型数据的DataFrame时,explode能正常工作:
import pandas as pd import numpy as np df = pd.DataFrame({'animals': [['koala', 'kangaroo', 'echidna'], ['sloth', 'alpaca'], ['zebra', 'lion', 'baboon']], 'diet': [['herbivorous', 'herbivorous', 'carnivorous'], ['omnivorous', 'herbivorous'], ['herbivorous', 'carnivorous', 'omnivorous']], 'country': ['Australia', 'Peru', 'Kenya']}) print(df)
原因分析
- 从Excel/CSV读取的
RefList列是字符串类型(如"apple,orange"),而explode函数仅对列表/数组/Series等可迭代类型的列生效。 - 测试用的DataFrame中,
animals列本身就是列表类型,所以explode可以正常拆分。 - 代码中
df.explode('RefList')仅打印了拆分结果,但没有将结果赋值回df,原DataFrame未被修改,保存的自然还是原始数据。
解决方案
先将字符串列转换为列表,再执行explode并更新DataFrame,最后保存:
import pandas as pd import os os.chdir('C:/Users/nick/Documents/Python') # 读取Excel数据 df = pd.read_excel('output1.xlsx', usecols=['PartNumber', 'RefList'], index_col=False) # 将逗号分隔的字符串拆分为列表 df['RefList'] = df['RefList'].str.split(',') # 执行explode并覆盖原DataFrame df = df.explode('RefList') # 保存结果,index=False避免写入索引列 df.to_excel('output2.xlsx', index=False)
关键说明
str.split(','):将每个字符串按逗号分割成列表,满足explode的输入要求。- 必须将
explode的结果重新赋值给df,否则原数据不会被修改。 - 保存时添加
index=False,防止额外的索引列被写入Excel文件。
内容的提问来源于stack exchange,提问作者NICK_CS
相关产品推荐
相关产品推荐

