Numpy isfinite typeerror

时间:2016-03-16 05:06:15

标签: python numpy

我知道我做错了但我不知道该怎么做。在我执行的代码中,我的系列来自一个大型数据框,我已经完成了一个组合。在实际代码中,赋值发生在循环中,从系列中选择各种切片。

下面的代码导致TypeError:输入类型不支持ufunc'isfinite'。我很肯定这是由于引用,而不是副本或该行的内容,但我在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)

第一个堆栈图工作得很好。第二次失败。因此我知道问题在于抓住价值观。结果列表LOOK相同(具有相同数量的值的整数)但第二个失败。

我看过切片,深度镜等,但它们仍然失败,所以根本问题是我缺乏理解。我也确定这是许多其他人的副本,但我只是没有掌握这个问题。

更新

这是引用

  

文件   “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行,在stackplot中       ret = ax.stackplot(x,* args,** kwargs)文件“C:\ Users \ dgrawroc \ Documents \ Anaconda3 \ envs \ m2 \ lib \ site-packages \ matplotlib__init __。py”,   1811年,在内心       return func(ax,* args,** kwargs)文件“C:\ Users \ dgrawroc \ Documents \ Anaconda3 \ envs \ m2 \ lib \ site-packages \ matplotlib \ axes_axes.py”,   第4443行,在stackplot中       return mstack.stackplot(self,x,* args,** kwargs)文件“C:\ Users \ dgrawroc \ Documents \ Anaconda3 \ envs \ m2 \ lib \ site-packages \ matplotlib \ stackplot.py”,   第113行,在stackplot中       ** kwargs))文件“C:\ Users \ dgrawroc \ Documents \ Anaconda3 \ envs \ m2 \ lib \ site-packages \ matplotlib__init __。py”,   1811年,在内心       return 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',输入无法安全   根据投射规则''safe''

强制执行任何支持的类型

1 个答案:

答案 0 :(得分:2)

以下代码执行相同的操作,它从数据框中选择,然后在堆栈图中显示选择。 我认为这个错误很神秘,很难搞清楚,但它确实让我写出了更好的代码

以下是工作代码:

    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)