首页 > 解决方案 > Pandas Dataframe/Python:如何在 python 的每次迭代中使用 for 循环更新数据框单元格值?

问题描述

我有一个带有 2 列(UserId,RandNo)的熊猫数据框。在此 UserId 中具有 10 行的值,如下所示

在此处输入图像描述

现在,我通过 for 循环填充 RandNo 列,如下所示。

import pandas as pd
import random

df=pd.read_csv('df_sto.csv', skipinitialspace=True)

rand=0
for index, row in df.iterrows():
    try:
            rand=random.randint(0,100)

            df.at[index, 'RandNo'] = rand           
    except Exception as e:
        print(e)
df.to_csv("df_sto1.csv", sep=',')

在这里,我仅在df_sto1.csv文件中获取更新值,更新值在df_sto.csv中不受影响。

如果数据框行很大并且如果在 df.iterrows() 中更新了 95% 的行后 for 循环遇到任何问题:for 'df_sto.csv ' 然后我想从 0% 本身重复该过程(从第 0 行开始本身)。为了避免这个问题,我想为每次循环迭代本身更新“df_sto.csv”的数据框,而不是通过 df.to_csv ("df_sto1.csv", sep=',')

指导我在每次迭代本身中使用 for 循环更新数据框单元格值。提前致谢。

标签: pythonpython-3.xpandasdataframe

解决方案


我不认为 try 块是必要的,但如果你坚持使用它,也许操作不仅仅是分配随机数,那么将它包装在一个函数中怎么样?

import pandas as pd
import random

df=pd.read_csv('df_sto.csv', skipinitialspace=True)
copy_df = df.copy()

def update_df(frame):
    for index, row in frame.iterrows():
        rand=random.randint(0,100)
        frame.at[index, 'RandNo'] = rand

    return frame


status = 0
while status == 0:
    try:
        copy_df = update_df(copy_df)
        status = 1
    except Exception as e:
        copy_df = df
        print(e)


df = copy_df
df.to_csv("df_sto1.csv", sep=',')

推荐阅读