【问题标题】:Pandas Dataframe/Python : How to update dataframe cell value using for loop at each iteration in python?Pandas Dataframe/Python:如何在 python 的每次迭代中使用 for 循环更新数据框单元格值?
【发布时间】:2019-08-04 20:44:41
【问题描述】:

我有一个带有 2 列(UserId、RandNo)的 pandas 数据框。在这个 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' 的数据框每个 for 循环迭代本身,而不是通过 df.to_csv("df_sto1.csv" , sep=',')

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

【问题讨论】:

  • 谁能建议我解决这种情况。谢谢
  • 您是否有任何理由不想立即更新/填充RandNo 列?

标签: python python-3.x pandas dataframe


【解决方案1】:

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

【讨论】:

  • 感谢kerwei的回复。使用您的答案,我评论最后一行“df.to_csv("df_sto1.csv", sep=',')" 然后我执行。该代码不会影响“df_sto.csv”。同样在我的问题中,我提到 for 循环在 95% 或过程中间遇到任何问题,我需要从头开始。克服这种情况是我的问题。但是根据您的代码,它没有解决。我的要求是更新不在新 *.csv 文件中打开的“df_sto.csv”。我请求您重新考虑您的回答以解决我的问题。注意:try 块对于我的代码不是强制性的。
  • 好的,我想我可能没有正确理解您的问题。你想1. read the contents of df_sto.csv2. Add in the column with random numbers3. Save the dataframe with the new column back into df_sto.csv吗?
  • 是的。 1. 我读取了 df_sto.csv 的内容, 2. UserId 列有 10 个值(行),但对应的 RandNo 列有空值 3. 现在我想用与 userId 列行对应的随机值更新 RandNo 列df_sto.csv 文件。注意:在这里,我使用随机数只是为了您的方便。最初我想为我的问题更新不同的列名和值。此外,我的 for 循环执行速度很慢,并且在部分执行 for 循环后的那段时间遇到一些问题,然后成功执行的值不会在 df_sto.csv 文件中更新。
  • 所以我想从 0 状态重新启动 for 循环。这是我的问题。指导我克服这种情况。谢谢。
  • @user1999109 我想我明白你的意思了。在开始循环之前创建一个副本应该会有所帮助。让我更新我的答案
猜你喜欢
  • 1970-01-01
  • 2018-10-13
  • 2019-05-10
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
相关资源
最近更新 更多