ValueError: Length mismatch: Expected axis has 2 elements, new values have 3 elements
ValueError: Length mismatch: Expected axis has 2 elements, new values have 3 elements
这是我计划用于创建饼图的代码。
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
在您的代码中,您将 Country
设置为索引,并在此行中
dfl=df.iloc[:,[14]]
您只需选择一列,即 TotalMedal
。
排序和重置索引后,您尝试按行更改列名
final_df.columns=('location','Total cases','Total Deaths')
这是错误..您只为一列过滤了数据框,并且在重置后 Country
也在列中。因此,您的数据框中只有两列,并尝试通过提供三个值来更改列的名称。
正确的行可能是-
final_df.columns=('location','TotalMedal')
这是我计划用于创建饼图的代码。
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
在您的代码中,您将 Country
设置为索引,并在此行中
dfl=df.iloc[:,[14]]
您只需选择一列,即 TotalMedal
。
排序和重置索引后,您尝试按行更改列名
final_df.columns=('location','Total cases','Total Deaths')
这是错误..您只为一列过滤了数据框,并且在重置后 Country
也在列中。因此,您的数据框中只有两列,并尝试通过提供三个值来更改列的名称。
正确的行可能是-
final_df.columns=('location','TotalMedal')