第一个帖子/总Python新手,所以耐心等待我的缓慢理解!
我有一个数据框架,其中包含按交易顺序的交易列表日期.
我附加了一个名为["DB/CR"]的新字段/列。,这取决于"-"的存在;在["Amount"]字段中填充'Debit',如果没有' "-",则填充'Credit'。
注意到事务是按日期顺序排列的,我已经包含了另一个名为[Top x]的新字段/列。它的输出是我想在隔离的基础上为借方和贷方填充一个增量独立数字(从1开始)。
因此,我创建了一个简单的循环,带有关联的'if'/'elif' (prob可以使用else,因为它是二进制的)语句,该语句循环遍历从第0行发送到df中的最后一行的数据,并使用if语句1)"Debit"或2)";Credit"以"借记"的方式独立地增加每个数字。'i'为整数,' Credit"二世"整数。
代码按照预期的输出工作的"Top x";然而,我总是收到一个警告&;试图在DataFrame的切片副本上设置一个值&;
试图完善我的脚本,没有任何警告我一直在试图理解我做错了什么,但没有在我的用例场景中得到它。
如果有人能善意地阐明/建议如何重构代码以避免收到此错误,我们将不胜感激。
代码(df源数据是导入的csv文件):
#top x debits/credits
i = 0
ii = 0
for ind in df.index:
if df["DB/CR"][ind] == "Debit":
i = i+1
df["Top x"][ind] = i
elif df["DB/CR"][ind] == "Credit":
ii = ii+1
df["Top x"][ind] = ii
翻译
df["Top x"][ind] = i
G:Finances BackupvenvStatementsv.03.py:173: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df["Top x"][ind] = ii
非常感谢:)
您应该使用df.loc["DB/CR", ind] = "Debit"
使用iterrows()遍历DF。但是,在迭代时更新DF是不可取的
查看这里的文档
参考这里的文档Iterrows()
你永远不应该修改你正在迭代的东西。这不是保证在所有情况下都有效。根据数据类型的不同迭代器返回的是副本而不是视图,对其进行写入将没有效果。