gpt4 book ai didi

python-3.x - Pandas Indexing-View-Versus-Copy

转载 作者:行者123 更新时间:2023-12-02 08:09:49 24 4
gpt4 key购买 nike

我有一个包含几列的数据框。稍后,将添加一个标题为“事件”的列。如果 'Volume' 列包含大于 0 的值,我需要将 'Active' 设置为 1。

这是我尝试过的一个简单示例:

import pandas as pd

active_df = pd.DataFrame(columns=['Volume'])
active_df['Volume'] = 0, 0, 22, 22, 0, 22, 0, 22, 0, 22
active_df['Active'] = 0

active_df['Active'].loc[active_df['Volume'] > 0] = 1

print(active_df)

虽然这会产生预期的结果,但我经常收到警告:“正在尝试在 DataFrame 中的切片副本上设置值”

我已阅读引用页面:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy但仍然无法解决。

我以为我已经在其他代码中处理过并解决了它,但是我在现有代码中找不到示例。

最佳答案

在最近一次投票后,我重新发现了这个问题。自从有人问到 Pandas 后,我对 Pandas 了解了很多,我想我会重新审视我的“切片副本”和解决方案的区别。

我最初的尝试是:

active_df['Active'].loc[active_df['Volume'] > 0] = 1

这确实是一种令人费解的方式。

首先我得到了 active_df['Volume'] > 0 的 bool 值然后在行值为 TRUE 的情况下,我将切片 active_df['Active'] 设置为 1。虽然这可行,但不确定这是数据框的 View 还是副本。


解决办法是:

active_df.loc[active_df['Volume'] > 0, 'Active'] = 1

在 active_df 数据框中,找到 active_df['Volume'] > 0 的行和“Active”列,并将这些值设置为 1。

或者换一种说法:为“Volume”列中值为 0 的行设置“Active”列的值 1。

所以您实际上是在处理整个数据帧 (active_df.loc) 而不是切片和可能的副本 (active_df['Active'].loc)

再次感谢 @Deena 提供解决方案。

关于python-3.x - Pandas Indexing-View-Versus-Copy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com