如何修复在切片上设置时的弃用警告

How to fix deprecation warning when setting on a slice

提问人:rasputin 提问时间:7/14/2023 更新时间:7/22/2023 访问量:199

问:

我正在尝试为 pandas 数据框中的每个观察值添加一年,直到每个观察值都在指定的日期范围内。

    for i in range(0,3):
        df.loc[df['date'] < "2023-06-01", 'date'] = df['date'] + pd.DateOffset(years=1)

我收到此警告。

DeprecationWarning: In a future version, `df.iloc[:, i] = newvals`
will attempt to set the values inplace instead of always setting
a new array. To retain the old behavior, use either
`df[df.columns[i]] = newvals` or, if columns are non-unique, 
`df.isetitem(i, newvals)`

我该如何解决这个问题?我尝试了很多东西,但我似乎无法绕过在切片上设置,我尝试的每种方法都会抛出 or .DeprecationWarningSettingWithCopyWarning

python-3.x 数据帧 pandas-settingwithcopy-warning

评论

0赞 Goku - stands with Palestine 7/15/2023
它现在应该可以工作,将来您必须根据警告消息进行调整。
0赞 Nick ODell 7/15/2023
你正在使用,对吧?但是错误消息提到 .当你遇到那个错误时,你能仔细检查你是否在使用 loc 吗?df.loc[]iloc[]
0赞 rasputin 7/15/2023
@NickODell 是的,我正在使用 df.loc[]。错误消息适用于 df.loc 和 df.iloc。请参阅此更新

答:

0赞 Omid Roshani 7/15/2023 #1

您可以使用此替代方法:

import pandas as pd

mask = df['date'] < "2023-06-01"
df.loc[mask, 'date'] = df.loc[mask, 'date'] + pd.DateOffset(years=1)

评论

0赞 rasputin 7/20/2023
这仍然给出了一个.DeprecationWarning
1赞 rasputin 7/22/2023 #2

试试这个:

for i in range(0,3):
    df['date'].mask(df['date'] < '2023-06-01', 
                    df['date'] + pd.DateOffset(years=1), inplace=True)