Pandas键错误:绘制海运箱形图时为0

iqjalb3h  于 2023-02-11  发布在  其他
关注(0)|答案(2)|浏览(139)

我使用以下代码读入Excel文件,并使用seaborn包绘制箱线图。

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")

excel表格如下所示:

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

如果我运行代码,我会得到以下错误消息:
按键错误追溯(最近调用最后一次)in()84打印(df1)85图2 =平面图(图大小=(15,10))---〉86 sns箱线图(数据= df1)87 sns群线图(数据= df1,颜色="黑色",α = 0.5)88平面标题("65051045-激光扫描仪获取曲线")
箱线图中的C:\ProgramData\Anaconda3\lib\site-packages\seaborn\categorical.py(x,y,色调,数据,顺序,色调顺序,方向,颜色,调色板,饱和度,宽度,传单大小,线宽,whis,陷波,ax,kwargs)
2173绘图仪=_BoxPlotter(x,y,色调,数据,顺序,色调顺序,
2174方向、颜色、调色板、饱和度,-〉2175宽度、传单大小、线宽)2176 2177如果ax为None:
C:\ProgramData\Anaconda3\lib\site-packages\seaborn\categorical.py in
init**(自身、x、y、色调、数据、顺序、色调顺序、方向、颜色、调色板、饱和度、宽度、传单大小、线宽)424宽度、传单大小、线宽):425--〉426自建立变量(x,y,色调,数据,方向,顺序,色调顺序)427自建立颜色(颜色,调色板,饱和度)428
C:\ProgramData\Anaconda3\lib\site-packages\seaborn\categorical.py在建立变量(自身、x、y、色调、数据、方向、顺序、色调顺序、单位)94中,如果有属性(数据、"形状"):95,如果透镜(数据形状)== 1:- --〉96,如果np.是标量(数据[0]):97绘图数据=[数据] 98否则:
C:\ProgramData\Anaconda3\lib\站点包\panda\core\series.py位于getitem(自身,键)599键= com._apply_if_callable(键,自身)600尝试:- -〉601结果= self. index. get_value(self,键)602 603如果不是则为标量(结果):
C:\程序数据\Anaconda3\库\站点包\Pandas\核心\索引\base.py在get_value(self,series,key)2426尝试:2427
返回自身.引擎.获取值(s,k,-〉2428 tz = getattr(系列.数据类型,'tz',无))2429,除了键错误为e1:2430如果len(self)〉0并且self. inferred_type位于["整数","布尔值"]中:
Pandas_库\索引. pyx在Pandas中._库.索引.索引引擎. get_value(Pandas_库\索引. c:4363)()
Pandas_库\索引. pyx在Pandas中._库.索引.索引引擎. get_value(Pandas_库\索引. c:4046)()
Pandas_库\索引. pyx在Pandas中._库.索引.索引引擎. get_loc(Pandas_库\索引. c:5085)()
panda_libs\散列表类帮助器. pxi在pandas中._libs.散列表. Int64散列表. get_item(panda_libs\散列表. c:13913)()
panda_libs\散列表类帮助器. pxi在pandas中._libs.散列表. Int64散列表. get_item(panda_libs\散列表. c:13857)()
密钥错误:0
令人惊讶的是,plot(df1)命令正在工作,并绘制:
我做错了什么???

mrfwxfqh

mrfwxfqh1#

我认为问题在于我已经定义了:

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

因此df1不再是 Dataframe ,并且海运将被混淆。
如果我改变:

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

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

并且还显式定义df1以使用以下内容作为 Dataframe :

df1= pd.DataFrame()

密码起作用了。
工作代码如下所示:

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")
xhv8bpkk

xhv8bpkk2#

我也有同样的问题。我用

df = df.reset_index(drop=True)

我的df的索引不好

相关问题