在for循环中使用df.explode() 不起作用

编程语言 2026-07-08

我想对多个DataFrame调用多个pandas函数,但没有效果。遗憾的是我不明白为什么,因为我认为只要pandas引用这些DataFrame,应该就能工作。

下面是一段简短的片段,用来演示这一行为。它没有涉及多帧的部分,因为帧的数量并不是问题。

import pandas as pd
df1 = pd.DataFrame({"foo":["1,2,3"]})

# This is working
df1["foo"]=df1["foo"].str.split(",")
df1=df1.explode(column="foo")

#This is working partly:
# for dataframe in [df1]:# This list is to be extended by other dataframes
#     dataframe["foo"]=dataframe["foo"].str.split(",") #working
#     dataframe=dataframe.explode(column="foo") #failing

预期的结果是

foo
0    1
1    2
2    3

解决方案

你可以直接在该列表上进行操作,并按它们的索引来更新DataFrame:

import pandas as pd

df1 = pd.DataFrame({"foo":["1,2,3"]})
df2 = pd.DataFrame({"foo":["4,5,6"]}) # Example of extended list

# Store DataFrames in a list
df_list = [df1, df2]

for i in range(len(df_list)):
    # Reassign the updated DataFrame back to its original spot in the list
    df_list[i]["foo"] = df_list[i]["foo"].str.split(",")
    df_list[i] = df_list[i].explode(column="foo")

print(df_list[0])
foo
0   1
0   2
0   3

.explode() 返回一个新的DataFrame对象,而不是就地修改数据。在你的列表中,dataframe 只是指向一个DataFrame的临时变量。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章