2017-05-30 1 views
1

ich folgenden Code auszuführen versuchen:Seaborn Heatmap unerwartete Fehler wirft

import seaborn as sns 
import pandas as pd 
import numpy as np 
year = range(1949,1961) 
month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] 
passengers = pd.Series(np.random.randint(100, 1000, len(year)*len(month)), name='passengers') 
years = pd.Series(year * len(month), name='years') 
months = pd.Series(month * len(year), name='months').sort_values().reset_index(drop=True) 
df = pd.DataFrame([years, months, passengers]).T 
df_flight = df.pivot(index="months", columns="years", values="passengers") 
sns.heatmap(df_flight, annot=True, fmt="d", linewidths=.5) 

Es wirft unerwarteten Fehler:

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' 

bitte erklären, was Fehler in meinem Code.

Antwort

1

Sie müssen Werte int von astype konvertieren, weil strings:

sns.heatmap(df_flight.astype(int), annot=True, fmt="d", linewidths=.5) 

Problem, wenn auf diese Weise die Verwendung DataFrame Konstruktor ist und Werte mindestens eine Spalte string s sind, dann wandeln sie alle Werte strings zu:

df = pd.DataFrame([years, months, passengers]).T 

print (df.dtypes) 
years   object 
months  object 
passengers object 

Lösung ist die Verwendung concat oder DataFrame Konstruktor mit dict s:

df = pd.concat([years, months, passengers], axis=1) 

print (df.dtypes) 
years   int64 
months  object 
passengers  int32 
dtype: object 

... 

sns.heatmap(df_flight, annot=True, fmt="d", linewidths=.5) 

Oder:

df = pd.DataFrame({'years':years, 'months':months, 'passengers':passengers}) 

print (df.dtypes) 
months  object 
passengers  int32 
years   int64 
dtype: object 

... 

sns.heatmap(df_flight, annot=True, fmt="d", linewidths=.5) 

graph

Verwandte Themen