为了账号安全,请及时绑定邮箱和手机立即绑定

为什么数据帧的这个单元格不包含值,而是包含一个系列?

为什么数据帧的这个单元格不包含值,而是包含一个系列?

慕容森 2021-11-02 19:17:22
我在 CSV 中读取了 python 中的数据框。我有一个 DateTimeIndex 和我感兴趣的两列,我们称它们为 number 和 upper_limit。我按索引排序,删除属于旧时间戳的不必要的列和行。然后我计算这两列的最小值、最大值和平均值numbercol = pd.to_numeric(df.iloc[:,0], errors='coerce')upperlimitcol = pd.to_numeric(df.iloc[:,1], errors = 'coerce')这工作正常。现在我想检查数字大于 upper_limit 的频率for dt in df.index:     if numbercol[dt] >= upperlimitcol[dt]:         overshoots += 1但我得到一个ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().我添加了一个打印语句来查看每个的 number 和 upper_limit 列的值,dt结果证明在 1800 行之后,单元格中的值不再是数字,但看起来像这样(这就是它给我的print(numbercol[dt]))DateTime2017-01-14       NaN2017-01-14    3018.0Name: Number, dtype: float64的类型numbercol[dt]也从<type 'numpy.float64'>到<class 'pandas.core.series.Series'>我在文本编辑器以及 Libre Office 和 Excel 中检查了该文件,但看不出此行与之前的行之间有任何区别。你知道为什么会这样吗?
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

它正在返回一个系列,因为您有两个具有相同dt. 不知道问题的背景,很难说如何进行。


一种方式是聚集在该数据用于使用循环sum()或一些其它aggregrating功能(即max(),min()等):


for dt in df.index:

   if numbercol[dt].sum() >= upperlimitcol[dt]:

       overshoots += 1

另一个可能是在 for 循环之前 dropna() 。


numbercol = numbercol.dropna()


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信