【问题标题】:Replacing value in csv using pandas isn't working使用熊猫替换 csv 中的值不起作用
【发布时间】:2022-11-26 11:32:39
【问题描述】:

我正在为一个应用程序开发一个模拟后端;练习面向对象。

我正在尝试替换 .csv 表中的值,一切似乎都很顺利,直到最后代码根本没有改变任何东西。我已经尝试调试,如下图所示,它显示我使用的值是正确的

    def test2(fname, lname, amount):
        # Open csv
        with open('clients.csv','r') as f:
            read = csv.reader(f)


            # Find index of client
            for index, row in enumerate(read):
                if fname in row[0]:
                    if lname in row[1]:
                        i = index - 1
            
            df = pd.read_csv('clients.csv')
            df.iat[i,6] = amount

使用 print(df.iloc[i,6]) 给我想要更改的值,但使用 df.iat[i,6] = amount 什么都不做。

(对不起,如果这看起来很乱,我是新来在这里提问的!)

【问题讨论】:

  • 为什么你用不同的方法奇怪地读取文件两次?
  • 您只想更改内存中数据帧的值,还是要更改实际 csv 文件中的值?
  • @tripleee 使用标准 csv 读取来查找客户端的行索引,因为我以前知道这一点,并且我认为我会使用 pandas,因为它似乎更容易对数据进行进一步的工作 XD
  • @JohnGordon 在实际文件中。比如说,无论出于何种原因,我都想创建另一个函数来重新读取文件,然后它会显示适当的值
  • 分配 df.iat[i,6] = amount 只会影响内存中的数据帧。它不会更新原始 csv 文件。

标签: python pandas csv


【解决方案1】:
    def test2(fname, lname, amount):
    # Open csv
    with open('clients.csv','r') as f:
        read = csv.reader(f)


        # Find row index of client
        for index, row in enumerate(read):
            if fname in row[0]:
                if lname in row[1]:
                     i = index - 1
                     

        # Update balance
        df = pd.read_csv('clients.csv')
        df.at[i,'Balance'] = amount
        df.to_csv('clients.csv', index=False)

是解决方案

【讨论】:

  • 虽然仅提供代码答案可能会回答问题,但建议为所做的任何添加或编辑提供解释。这样,未来的读者就可以理解您的解决方案。请edit您的回答以添加上下文和/或对您的代码的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2023-03-06
  • 2021-08-16
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多