提问人:rasputin 提问时间:7/14/2023 更新时间:7/22/2023 访问量:199
如何修复在切片上设置时的弃用警告
How to fix deprecation warning when setting on a slice
问:
我正在尝试为 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 .DeprecationWarning
SettingWithCopyWarning
答:
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)
评论
df.loc[]
iloc[]