Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas Dataframe/Python:如何在Python中的每次迭代中使用for循环更新Dataframe单元格值?_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Pandas Dataframe/Python:如何在Python中的每次迭代中使用for循环更新Dataframe单元格值?

Pandas Dataframe/Python:如何在Python中的每次迭代中使用for循环更新Dataframe单元格值?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个熊猫数据框,有两列(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

我有一个熊猫数据框,有两列(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行本身)重复该过程。为了避免这个问题,我想更新每个for循环迭代本身的数据帧,而不是通过df.To_csv(“df_sto1.csv”,sep=,”)来获得更新值。


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

我认为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=',')

我不认为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=',')

谁能给我建议一下这种情况的解决办法吗。谢谢您有什么原因不想立即更新/填写
RandNo
列吗?有人能给我建议解决这种情况的方法吗。谢谢您有什么理由不想立即更新/填写
RandNo
列吗?谢谢kerwei的回复。使用您的答案,我对最后一行“df.to_csv(“df_sto1.csv”,sep=”,“)进行注释,然后执行。代码不影响“df_sto.csv”。在我的问题中,我还提到,对于循环,在95%或在过程中遇到任何问题,我需要从第一个开始重新启动。克服这种情况是我的问题。但是根据你的代码,它没有被解决。我的请求是更新打开的“df_sto.csv”,而不是在新的*.csv文件中。我请求你重新考虑你的回答以解决我的问题。注意:我的代码不强制使用try块。好吧,我想可能我没有正确地理解你的问题。您正在尝试
1。阅读df_sto.csv的内容
2。在列中添加随机数
3。将带有新列的数据帧保存回df_sto.csv
?是。1.我阅读了df_sto.csv的内容,2。列UserId有10个值(行),但相应的RandNo列有空值3。现在我想用与同一df_sto.csv文件中的userId列行相对应的随机值更新RandNo列。注:在这里,我使用的随机数只是为了您的方便。最初,我想为我的问题更新不同的列名和值。此外,我的for循环执行速度较慢,在执行for循环的一部分之后,会遇到一些问题,然后df_sto.csv文件中不会更新成功执行的值。因此,我希望从0状态重新启动for循环。这是我的问题。指导我克服这种情况。谢谢。@user1999109我想我明白你的意思了。在开始循环之前创建副本应该会有所帮助。让我更新我的答案谢谢kerwei的回复。使用您的答案,我对最后一行“df.to_csv(“df_sto1.csv”,sep=”,“)进行注释,然后执行。代码不影响“df_sto.csv”。在我的问题中,我还提到,对于循环,在95%或在过程中遇到任何问题,我需要从第一个开始重新启动。克服这种情况是我的问题。但是根据你的代码,它没有被解决。我的请求是更新打开的“df_sto.csv”,而不是在新的*.csv文件中。我请求你重新考虑你的回答以解决我的问题。注意:我的代码不强制使用try块。好吧,我想可能我没有正确地理解你的问题。您正在尝试
1。阅读df_sto.csv的内容
2。在列中添加随机数
3。将带有新列的数据帧保存回df_sto.csv
?是。1.我阅读了df_sto.csv的内容,2。列UserId有10个值(行),但相应的RandNo列有空值3。现在我想用与同一df_sto.csv文件中的userId列行相对应的随机值更新RandNo列。注:在这里,我使用的随机数只是为了您的方便。最初,我想为我的问题更新不同的列名和值。此外,我的for循环执行速度较慢,在执行for循环的一部分之后,会遇到一些问题,然后df_sto.csv文件中不会更新成功执行的值。因此,我希望从0状态重新启动for循环。这是我的问题。指导我克服这种情况。谢谢。@user1999109我想我明白你的意思了。在开始循环之前创建副本应该会有所帮助。让我更新我的答案