pandas DataFrame的真值不明确,请使用.empty、.bool()、.item()、.any()或.all(),这不是因为运算符“or”

3qpi33ja  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(122)

vol_df值如下所示:

stock transactions
0   6668624093
1   7000414730
2   7666161224
3   5882916889
4   6301315220
5   4240619512
6   5152771960
7   5604573262
8   5632000282
9   4141531366
10  5099018549
11  5269035601
12  5587861806
13  4516673303
14  4591419535
15  3914740328
16  4347751931
17  4745714862
18  4911766203
19  4901183056

但是我为什么要做avg_vol_df=pd.Series(vol_df).rolling(window=20).mean()呢?
"The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()."
请帮帮我。非常感谢。
我试过avg_vol_df=vol_df.rolling(20).mean()
我得到NaN作为答案
我试过avg_vol_df=vol_df.rolling(min_periods=1).mean()
我得到了科学符号比如6.66~~~~+09

jgovgodb

jgovgodb1#

问题是你在DataFrame上调用pd.Series,如果你有一个只有一列的 Dataframe ,你可以使用pd.DataFrame.squeeze()把它变成一个序列,但是我建议你只选择你想要的列:

vol_df["stock transactions"].rolling(window=20).mean()

或者将其完全省略以使滚动应用于所有列:

vol_df.rolling(window=20).mean()

出现NaN值是因为大小为20的滚动窗口至少需要20个值,因此您的输入仅包含1个此类窗口。
使用科学记数法是因为计算平均值会返回一个浮点值,并且您的输入足够大,可以使用科学记数法进行格式化。如果愿意,您可以自定义此行为。

相关问题