Python TypeError: аргумент float () должен быть строкой или числом, а не 'SingleBlockManager' - PullRequest
0 голосов
/ 13 февраля 2019

Буду признателен за любой вклад.Раньше я мог получить изображение, используя этот код, но, возвращаясь к своей работе, теперь он дает мне эту ошибку.Любые идеи, как я могу это исправить? Возможно, это связано с недавним обновлением matplotlib?

Код, который я использую

import pandas as pd
import numpy as np
np.random.seed(12345)
df = pd.DataFrame([np.random.normal(32000,200000,3650), 
                   np.random.normal(43000,100000,3650), 
                   np.random.normal(43500,140000,3650), 
                   np.random.normal(48000,70000,3650)], 
                  index=[1992,1993,1994,1995])
import matplotlib as mpl
import matplotlib.pyplot as plt
import scipy.stats as ss
%matplotlib notebook
n = df.shape[1]
year_means = df.mean(axis=1)
year_std = df.std(axis=1)/(np.sqrt(n))
yerr = year_std * 1.96
y= 37000
norm = mpl.colors.Normalize(vmin=-1.96,vmax=1.96)
cmap = mpl.cm.get_cmap('seismic')
colors = pd.DataFrame([])
colors['intensity'] = norm((year_means-y) / year_std)
colors['color'] = [cmap(x) for x in colors['intensity']]
plt.figure()
bar_plot = plt.bar(range(df.shape[0]), year_means, yerr = yerr, color = colors['color']);
hoz_line = plt.axhline(y=y, color='grey', linewidth=2, linestyle = ':');
y_text = plt.text(3.4, y, 'y = %d' %y, bbox=dict(fc='white',ec='k'));
plt.xticks(range(df.shape[0]), df.index, alpha = 0.8);

Сообщение об ошибке, которое я получаю

TypeError                                 Traceback (most recent call last)
<ipython-input-10-6b68c0797acf> in <module>()
      2 cmap = mpl.cm.get_cmap('seismic')
      3 colors = pd.DataFrame([])
----> 4 colors['intensity'] = norm((year_means-y) / year_std)
      5 colors['color'] = [cmap(x) for x in colors['intensity']]
      6 plt.figure()

TypeError: float() argument must be a string or a number, not 'SingleBlockManager'

1 Ответ

0 голосов
/ 13 февраля 2019

Я смог исправить.По-видимому, вы больше не можете вызывать matplotlib.colors.Normalize с фреймом данных в matplotlib 2.2.Вместо этого используйте значения, которые я обновил в строке 4 до

colors['intensity'] = norm(((year_means-y) / year_std).values)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...