Numpy isfinite typeerror
Posted
技术标签:
【中文标题】Numpy isfinite typeerror【英文标题】: 【发布时间】:2016-07-01 20:00:20 【问题描述】:我知道我做错了,但我不知道如何做对。在我执行的代码中,我拥有的系列来自一个我已经完成 groupby 的大型数据框。在实际代码中,赋值发生在循环中,从系列中选择不同的切片。
下面的代码导致 TypeError: ufunc 'isfinite' not supported for the input type。我很肯定这是由于引用,而不是该行的副本或其他内容,但我在 Python 中还不够好,无法理解如何修复它。
import sys
import numpy as np
import pandas as pd
import random
import matplotlib.pyplot as plt
plt.ion()
period = 36
ward_dates = pd.date_range(start=pd.datetime.today(), freq='M', periods=period)
list_size = 6
ward_counts = [[] for i in range(list_size)]
for idx in range(list_size):
current_list = [np.random.randint(0, 500000) for r in range(period)]
ward_counts[idx] = current_list
plt.stackplot(ward_dates, ward_counts)
plt.close('all')
units = np.random.choice(['U1', 'U2', 'U3'], size=period)
index = pd.MultiIndex.from_arrays([units, ward_dates])
s1 = pd.Series([np.random.randint(0, 5000) for r in range(period)], index=index)
ward_counts = [[] for i in range(3)]
l1 = [int(x) for x in s1.loc['U1'].values]
ward_counts[0] = l1
l1 = [int(x) for x in s1.loc['U2'].values]
ward_counts[1] = l1
l1 = [int(x) for x in s1.loc['U3'].values]
ward_counts[2] = l1
plt.stackplot(ward_dates, ward_counts)
第一个堆栈图工作得很好。第二个失败。因此,我知道问题在于获取价值。结果列表看起来相同(具有相同数量值的整数),但第二个失败。
我看过切片、深度复制等,但它们仍然失败,所以根本问题是我缺乏理解。我也确定这是许多其他人的重复,但我只是不明白这个问题。
更新
这是引用
文件 "C:/Users/dgrawroc/PycharmProjects/fs_admin_reports/fs_admin_reports/oldstuff.py", 第 47 行,主要 plt.stackplot(ward_dates, ward_counts) 文件 "C:\Users\dgrawroc\Documents\Anaconda3\envs\m2\lib\site-packages\matplotlib\pyplot.py", 第 3326 行,在堆栈图中 ret = ax.stackplot(x, *args, **kwargs) 文件 "C:\Users\dgrawroc\Documents\Anaconda3\envs\m2\lib\site-packages\matplotlib__init__.py", 第 1811 行,在内部 返回 func(ax, *args, **kwargs) 文件 "C:\Users\dgrawroc\Documents\Anaconda3\envs\m2\lib\site-packages\matplotlib\axes_axes.py", 第 4443 行,在堆栈图中 返回 mstack.stackplot(self, x, *args, **kwargs) 文件 "C:\Users\dgrawroc\Documents\Anaconda3\envs\m2\lib\site-packages\matplotlib\stackplot.py", 第 113 行,在堆栈图中 **kwargs)) 文件“C:\Users\dgrawroc\Documents\Anaconda3\envs\m2\lib\site-packages\matplotlib__init__.py”, 第 1811 行,在内部 返回 func(ax, *args, **kwargs) 文件 "C:\Users\dgrawroc\Documents\Anaconda3\envs\m2\lib\site-packages\matplotlib\axes_axes.py", 第 4608 行,在 fill_between y2 = ma.masked_invalid(self.convert_yunits(y2)) 文件 "C:\Users\dgrawroc\Documents\Anaconda3\envs\m2\lib\site-packages\numpy\ma\core.py", 第 2293 行,在 masked_invalid 中 condition = ~(np.isfinite(a)) TypeError: ufunc 'isfinite' not supported for the input types, and the inputs can not be safe 根据强制转换规则 ''safe'' 强制转换为任何支持的类型
【问题讨论】:
忘记添加我在 Numpy 1.10.4 和 python 3.5 上,如果有影响的话 我没有看到任何isfinite
电话...您能提供完整的 Traceback 吗?另外建议edit问题而不是提供额外的细节作为cmets。
【参考方案1】:
下面的代码做同样的事情,它从数据框中选择,然后在堆栈图中显示选择。 我认为这个错误非常神秘且难以弄清楚,但它确实让我编写了更好的代码
这是工作代码:
period = 36
first_month = datetime.datetime(2013, 1,1)
last_month = datetime.datetime(2015, 12, 1)
ward_dates1 = pd.date_range(start=first_month, freq='M', periods=period)
units = np.random.choice(['U1', 'U2', 'U3'], size=period)
index = pd.MultiIndex.from_arrays([units, ward_dates1])
s1 = pd.Series([np.random.randint(0, 5000) for r in range(period)], index=index)
t1 = s1.loc['U1']
t2 = s1.loc['U2']
t3 = s1.loc['U3']
t1r = t1.reindex(ward_dates1, fill_value=0)
t2r = t2.reindex(ward_dates1, fill_value=0)
t3r = t3.reindex(ward_dates1, fill_value=0)
tall = np.vstack((t1r, t2r, t3r))
plt.stackplot(ward_dates1, tall)
【讨论】:
以上是关于Numpy isfinite typeerror的主要内容,如果未能解决你的问题,请参考以下文章
如何在共享库中找到 C++ isfinite() 的解析位置?