请考虑以下代码:

import pandas as pd
import random

data = {'col1': [random.randint(0, 100) for _ in range(5)],
        'col2': [random.randint(0, 100) for _ in range(5)]}

df = pd.DataFrame(data)


lista = []
df['test'] = None
for index, row in df.iterrows():
    lista.append([random.randint(0, 100) for _ in range(5)])
    df.at[index, 'test'] = lista
    print(index,lista)

display(df)

为什么最终输出总是显示最后一次迭代的列表?我的意思是,既然df.at更新索引处的值,并且我的索引是连续的(使用迭代行),为什么所有行的输出都是[[first list], [second list], [third list], [fourth list], [fifth list]]

我想要的输出是:

test
[[first list]]
[[first list], [second list]]
[[first list], [second list], [third list]]
[[first list], [second list], [third list], [fourth list]]
[[first list], [second list], [third list], [fourth list], [fifth list]]

推荐答案

您看到的是不希望看到的结果,因为您在每次迭代中都更新相同的列表lista.相反,应将该列表的副本分配给数据帧:

import random

import pandas as pd

data = {
    "col1": [random.randint(0, 100) for _ in range(5)],
    "col2": [random.randint(0, 100) for _ in range(5)],
}

df = pd.DataFrame(data)


lista = []
df["test"] = None
for index, row in df.iterrows():
    lista.append([random.randint(0, 100) for _ in range(5)])
    df.at[index, "test"] = lista.copy()       # <-- copy a list here!
    print(index, lista)

print(df)

打印:

   col1  col2                                                                                                           test
0    90    55                                                                                         [[47, 70, 98, 43, 95]]
1    74    16                                                                    [[47, 70, 98, 43, 95], [4, 86, 69, 84, 51]]
2    45    90                                             [[47, 70, 98, 43, 95], [4, 86, 69, 84, 51], [81, 74, 33, 100, 77]]
3    77    56                        [[47, 70, 98, 43, 95], [4, 86, 69, 84, 51], [81, 74, 33, 100, 77], [34, 47, 85, 4, 74]]
4    49    43  [[47, 70, 98, 43, 95], [4, 86, 69, 84, 51], [81, 74, 33, 100, 77], [34, 47, 85, 4, 74], [70, 29, 25, 47, 99]]

Python相关问答推荐

如何制作10,000年及以后的日期时间对象?

运输问题分支定界法&

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

如何让这个星型模式在Python中只使用一个for循环?

如何设置视频语言时上传到YouTube与Python API客户端

Odoo 16使用NTFS使字段只读

名为__main__. py的Python模块在导入时不运行'

从Windows Python脚本在WSL上运行Linux应用程序

如何在Pyplot表中舍入值

Maya Python脚本将纹理应用于所有对象,而不是选定对象

下三角形掩码与seaborn clustermap bug

pandas fill和bfill基于另一列中的条件

以异步方式填充Pandas 数据帧

如何在GEKKO中使用复共轭物

如何设置nan值为numpy数组多条件

为罕见情况下的回退None值键入

PYTHON中的pd.wide_to_long比较慢

为什么按下按钮后屏幕的 colored颜色 保持不变?

如何使用Polars从AWS S3读取镶木地板文件

如何在微调Whisper模型时更改数据集?