提问人:Wooseok Han 提问时间:9/10/2023 更新时间:9/10/2023 访问量:16
Pandas DataFrame 未更新 CSV:append() 与 .loc 和函数文件放置
Pandas DataFrame not updating CSV: append() vs .loc and function file placement
问:
我在 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)
答: 暂无答案
评论