【问题标题】:ValueError: Length mismatch: Expected axis has 2 elements, new values have 3 elementsValueError:长度不匹配:预期轴有 2 个元素,新值有 3 个元素
【发布时间】:2020-12-18 17:02:36
【问题描述】:

这是我计划用于创建饼图的代码。

import csv
with open('C:\\Users\Bhuwan Bhatt\Desktop\IP PROJECT\Book1.csv', 'r') as file :
    reader = csv.reader(file)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def piechart1():
   df=pd.read_csv('data,csv',  sep=' ', index_col=False,skipinitialspace=True\
                 ,error_bad_lines=False,encoding= 'unicode_escape')
   df=df.set_index(['Country'])
   dfl=df.iloc[:,[14]]
   final_df=dfl.sort_values(by='TotalMedal')
   final_df.reset_index(inplace=True)
   final_df.columns=('location','Total cases','Total Deaths')
   final_df=final_df.drop(11,axis='index')
   countries=df['Country']
   tmedals=df['TotalMedal']
   plt.pie(tmedals,labels=countries,explode=(0.1,0,0,0,0,0,0,0,0,0,0.2),shadow=True,autopct='%0.1f%%')
   plt.title("Olympics data analysis\nTop 10 Countries", color='b',fontsize=12)
   plt.gcf().canva.set_window_title("OLMPICS ANALYSIS")
   plt.show()

由于某种原因我收到此错误:

AttributeError: 'DataFrameGroupBy' object has no attribute 'sort_values'

这是我一直在使用的 CSV 文件:

Country SummerTimesPart Sumgoldmedal    Sumsilvermedal  Sumbronzemedal  SummerTotal WinterTimesPart Wingoldmedal    Winsilvermedal  Winbronzemedal  WinterTotal TotalTimesPart  Tgoldmedal  Tsilvermedal    Tbronzemedal    TotalMedal
     Afghanistan    14  0   0   2   2   0   0   0   0   0   14  0   0   2   2
     Algeria    13  5   4   8   17  3   0   0   0   0   16  5   4   8   17
     Argentina  24  21  25  28  74  19  0   0   0   0   43  21  25  28  74
     Armenia    6   2   6   6   14  7   0   0   0   0   13  2   6   6   14

INFO-----> SummerTimesPart  :  No. of times participated in summer by each country
           WinterTimesPart  :  No. of times participated in winter by each country

【问题讨论】:

  • 这里为什么要执行groupby?您的代码中是否有可能的重复项?尝试在您的数据帧上执行 sort_values,而不是在 groupby 结果上执行。
  • dfl.groupby('Country') 不返回数据帧,因此w 不是数据帧而是“DataFrameGroupBy”对象。因此它没有sort_values 方法。
  • @zot8 是的,你是对的。但这是我在删除 groupby 行 ValueError 后得到的:长度不匹配:预期轴有 2 个元素,新值有 3 个元素
  • @DeepakBhatt 请用您面临的新错误更新您的问题。还要放置整个错误堆栈跟踪,而不仅仅是错误行。
  • @AbhilashAwasthi 请检查一下这个新错误。

标签: python pandas syntax-error data-visualization pie-chart


【解决方案1】:

在您的代码中,您将 Country 设置为索引并在此行中

dfl=df.iloc[:,[14]]

您只需选择一列 TotalMedal
排序和重置索引后,您尝试按行更改列名

final_df.columns=('location','Total cases','Total Deaths')

这是错误..您只过滤了一列的数据框,重置后在列中也得到Country。因此,您的数据框中只有两列,并尝试通过提供三个值来更改列的名称。

正确的行可能是 -

final_df.columns=('location','TotalMedal')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 2018-09-21
    • 2020-07-10
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多