2017-09-27 2 views
0

Ich benutze den folgenden Code, um eine Excel-Datei einzulesen und einen Boxplot mit dem Seaborn-Paket zu plotten.Pandas Key Fehler: 0 beim Plotten eines Seeborn Boxplots

import scipy.stats as sps 
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 
from openpyxl import load_workbook 
sns.set() 


inpath=r"P:\Data.xlsx" 

df=pd.read_excel(io=inpath,header=0,sheetname="65051045") 
df1=df[df["Gel.Menge"]!=0]["Gel.Menge"] 
print(df1) 
fig2=plt.figure(figsize=(15,10)) 
sns.boxplot(data=df1) 
sns.swarmplot(data=df1,color="black",alpha=0.5) 
plt.title("65051045") 

die Excel-Tabelle wie folgt aussieht:

Gel.Menge Erf.datum Freig. 
0,000 26.11.2014 26.11.2014 
10,000 06.11.2014 07.11.2014 
5,000 19.12.2014 08.01.2015 
7,000 07.07.2015 17.07.2015 
1,000 21.07.2015 22.07.2015 
5,000 18.03.2016 22.03.2016 
10,000 29.03.2016 31.03.2016 
10,000 20.07.2016 21.07.2016 
20,000 13.10.2016 17.10.2016 
5,000 01.12.2014 01.12.2014 
3,000 20.04.2015 20.04.2015 

Wenn ich den Code, den ich die folgende Fehlermeldung aus:

KeyError Traceback (most recent call last) in() 84 print(df1) 85 fig2=plt.figure(figsize=(15,10)) ---> 86 sns.boxplot(data=df1) 87 sns.swarmplot(data=df1,color="black",alpha=0.5) 88 plt.title("65051045 - Laserschweißen Getriebeabtrieb Rundnaht")

C:\ProgramData\Anaconda3\lib\site-packages\seaborn\categorical.py in boxplot(x, y, hue, data, order, hue_order, orient, color, palette, saturation, width, fliersize, linewidth, whis, notch, ax, **kwargs)
2173 plotter = _BoxPlotter(x, y, hue, data, order, hue_order,
2174 orient, color, palette, saturation, -> 2175 width, fliersize, linewidth) 2176 2177 if ax is None:

C:\ProgramData\Anaconda3\lib\site-packages\seaborn\categorical.py in init(self, x, y, hue, data, order, hue_order, orient, color, palette, saturation, width, fliersize, linewidth) 424 width, fliersize, linewidth): 425 --> 426 self.establish_variables(x, y, hue, data, orient, order, hue_order) 427 self.establish_colors(color, palette, saturation) 428

C:\ProgramData\Anaconda3\lib\site-packages\seaborn\categorical.py in establish_variables(self, x, y, hue, data, orient, order, hue_order, units) 94 if hasattr(data, "shape"): 95 if len(data.shape) == 1: ---> 96 if np.isscalar(data[0]): 97 plot_data = [data] 98 else:

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py in getitem(self, key) 599 key = com._apply_if_callable(key, self) 600 try: --> 601 result = self.index.get_value(self, key) 602 603 if not is_scalar(result):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key) 2426 try: 2427
return self._engine.get_value(s, k, -> 2428 tz=getattr(series.dtype, 'tz', None)) 2429 except KeyError as e1: 2430 if len(self) > 0 and self.inferred_type in ['integer', 'boolean']:

pandas_libs\index.pyx in pandas._libs.index.IndexEngine.get_value (pandas_libs\index.c:4363)()

pandas_libs\index.pyx in pandas._libs.index.IndexEngine.get_value (pandas_libs\index.c:4046)()

pandas_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc (pandas_libs\index.c:5085)()

pandas_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item (pandas_libs\hashtable.c:13913)()

pandas_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item (pandas_libs\hashtable.c:13857)()

KeyError: 0

Suprisingly das Grundstück (df1) Befehl und es funktioniert Grundstücke:

1  10 
2  5 
3  7 
4  1 
5  5 
6  10 
7  10 
8  20 
9  5 
10  3 
Name: Gel.Menge, dtype: int64 

Was für ein m mache ich falsch ???

Antwort

0

Ich nehme an, das Problem ist, dass ich definiert haben:

df1=df[df["Gel.Menge"]!=0]["Gel.Menge"] 

damit df1 ist nicht länger ein Datenrahmen und Seaborn geht zu verwechseln.

Wenn ich ändern:

df1=df[df["Gel.Menge"]!=0]["Gel.Menge"] 

zu

df1["Gel.Menge"]=df["Gel.Menge"].where(df["Gel.Menge"]!=0).dropna() 

und auch df1 zu ba ein Datenrahmen mit explizit definieren:

df1= pd.DataFrame() 

der Code funktioniert.

Der Arbeits Code sieht wie folgt aus:

inpath=r"P:\Data.xlsx" 
df1=pd.DataFrame() 

df=pd.read_excel(io=inpath,header=0,sheetname="65051045") 
df1["Gel.Menge"]=df["Gel.Menge"].where(df["Gel.Menge"]!=0).dropna() 
print(df1) 
fig2=plt.figure(figsize=(15,10)) 
sns.boxplot(data=df1) 
sns.swarmplot(data=df1,color="black",alpha=0.5) 
plt.title("65051045") 
+0

Ich würde es begrüßen, wenn jemand mir den wahren Grund für den Fehler berichten – 2Obe