在for循环中使用df.explode() 不起作用
我想对多个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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。