提问人:George 提问时间:9/17/2023 更新时间:9/18/2023 访问量:439
pandas 2.1.0 中的未来警告消息
Future warning message in pandas 2.1.0
问:
我有以下代码:
df['FilterVol'] = np.NaN
df.loc[(df['Volume'] >= df['PrevVolume']), 'FilterVol'] = 1
df['DaysLast2Week'] = df['FilterVol'].rolling(14, min_periods=1).apply(value_counts)
我收到以下未来警告消息: FutureWarning:在单个元素 Series 上调用 float 已弃用,将来会引发 TypeError。请改用 float(ser.iloc[0])
FutureWarning:pandas.value_counts 已弃用,将在将来的版本中删除。使用 pd。Series(obj).value_counts() 代替。
所有这些都是在将我的系统从 python 3.9 升级到 3.11 以及对包括 pandas 在内的各种软件包进行一系列升级之后实现的。我目前的 pandas 版本是 2.1.0。 我表中的所有列都是 dtype: float64。 我尝试了一些选择,但似乎没有任何效果。谁能告诉我如何修改此代码以摆脱这些警告?
答:
1赞
Timeless
9/18/2023
#1
IIUC,您可以简单地 Rolling.sum
一次性关闭两个 s:FutureWarning
FutureWarning
:pandas.value_counts 已弃用,将在将来的版本中删除。使用 pd。Series(obj).value_counts() 代替。
:在单个元素 Series 上调用 float 已弃用,将来会引发 TypeError。请改用 float(ser.iloc[0])FutureWarning
df["DaysLast2Week"] = df["FilterVol"].rolling(14, min_periods=1).sum()
另一个变体,不使用中间列:FilterVol
m = df["Volume"].ge(df["PrevVolume"])
df["DaysLast2Week"] = m.mask(~m).rolling(14, min_periods=1).sum()
输出:
print(df) # with your fixed approach
Volume PrevVolume FilterVol DaysLast2Week
0 117 392 NaN NaN
1 315 241 1.0 1.0
2 152 119 1.0 2.0
3 335 80 1.0 3.0
4 283 235 1.0 4.0
.. ... ... ... ...
95 183 159 1.0 5.0
96 346 231 1.0 6.0
97 262 240 1.0 6.0
98 278 296 NaN 6.0
99 274 144 1.0 7.0
[100 rows x 4 columns]
使用的输入:
np.random.seed(1)
df = pd.DataFrame({
"Volume": np.random.randint(80, 350, 100),
"PrevVolume": np.random.randint(65, 400, 100)}
)
评论
0赞
Parfait
9/18/2023
OP 是否尝试滚动求和?还是滚动?value_counts
0赞
Timeless
9/18/2023
除非我弄错了,否则等价于 .pd.Series([np.nan, 1, 1, np.nan]).value_counts()
pd.Series([np.nan, 1, 1, np.nan]).sum()
评论
.apply('value_counts')