Pandas DataFrame 未更新 CSV:append() 与 .loc 和函数文件放置

Pandas DataFrame not updating CSV: append() vs .loc and function file placement

提问人:Wooseok Han 提问时间:9/10/2023 更新时间:9/10/2023 访问量:16

问:

我在 pandas 上遇到了一个特殊的问题,以及它在根据使用的方法 (vs ) 和函数放置位置(在同一文件与单独的文件中)更新 DataFrames 时的行为方式。append().loc

背景:

我熟悉 pandas 中的方法返回一个新的 DataFrame。因此,当您使用 时,实质上是将局部作用域中的变量重新分配给这个新的 DataFrame,而保持全局变量不变。因此,可以使用就地修改 DataFrame 的方法来避免此重新分配问题。append()append().loc

场景 1(反馈):

  • 将 CSV 中的反馈加载到 DataFrame 中。feedbacks
  • 使用 附加了新的反馈。feedbacks = feedbacks.append(new_data)
  • CSV 未更新新的反馈。(预期)
  • 处理反馈的函数(例如,)位于与主逻辑不同的文件中。update_feedbacks()
  • 当我将方法更改为使用 .loc 而不是 append() 时,CSV 正确更新。(预期)

场景 2(用户):

  • 将用户从另一个 CSV 加载到 DataFrame 中。users
  • 使用 附加新用户。users = users.append(new_data)
  • CSV 已使用新用户正确更新。(出乎意料)
  • 所有与用户相关的功能和逻辑都位于同一文件中。

问题:

我对第二种情况感到困惑。即使我使用了 append() 方法,它应该创建一个新的 DataFrame 并重新分配局部变量,但 CSV 更新正确。这两种方案之间唯一明显的区别是函数的位置(相同的文件与单独的文件)。

将函数放置在单独的文件中与单个文件中是否会影响 pandas 在 DataFrame 重新分配方面的行为方式?如果是这样,为什么?对此意外行为的任何澄清将不胜感激!

法典

以下是我的代码的简化版本,用于反馈:


# main.py
from utils import *

def rate_and_feedback_product(username):
    global feedbacks
    ...
    feedback = { ... }
    feedbacks = feedbacks.append(feedback, ignore_index=True)
    print(feedbacks)
    update_feedbacks()

# utils.py
def load_data_from_pandas(filename):
    filepath = f'{DATA_DIR}/{filename}'
    if os.path.exists(filepath):
        return pd.read_csv(filepath)
    else:
        print(f"The path '{filepath}' does not exist!")

feedbacks = load_data_from_pandas('feedbacks.csv')

def update_feedbacks():
    global feedbacks
    ...
    save_data_to_pandas('feedbacks.csv', feedbacks)

对于用户:


def add_user():
    global users
    ...
    user = { ... }
    users = users.append(user, ignore_index=True)
    update_users()

def update_users():
    global users
    ...
    save_user('users.csv', users)

Python Pandas DataFrame CSV 文件

评论


答: 暂无答案