python - Python matplotlib 成条形图
问题描述
我有 2 个 python 文件和 1 个 csv 文件。
我正在尝试从每个国家/地区收集 2000 年至 2009 年的所有访客并选择前 3 个国家,因为它将显示前 3 个国家/地区的条形图
我遇到的错误是:
Traceback (most recent call last):
File "C:/ASP/pythonProjectDA_YODA/main.py", line 3, in <module>
countries=Countries("2000","2009","China","Japan")
File "C:\ASP\pythonProjectDA_YODA\countries.py", line 8, in __init__
dfVisitor.index=pd.to_datetime(dfVisitor.index)
File "C:\Users\65965\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\tools\datetimes.py", line 812, in to_datetime
result = convert_listlike(arg, format, name=arg.name)
File "C:\Users\65965\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\tools\datetimes.py", line 459, in _convert_listlike_datetimes
result, tz_parsed = objects_to_datetime64ns(
File "C:\Users\65965\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\arrays\datetimes.py", line 2044, in objects_to_datetime64ns
result, tz_parsed = tslib.array_to_datetime(
File "pandas\_libs\tslib.pyx", line 352, in pandas._libs.tslib.array_to_datetime
File "pandas\_libs\tslib.pyx", line 579, in pandas._libs.tslib.array_to_datetime
File "pandas\_libs\tslib.pyx", line 718, in pandas._libs.tslib.array_to_datetime_object
File "pandas\_libs\tslib.pyx", line 552, in pandas._libs.tslib.array_to_datetime
TypeError: <class 'tuple'> is not convertible to datetime
我不知道这意味着什么,因为这仍然是我第一次学习这个。
main.py 文件代码如下:
**from countries import Countries
countries=Countries("ListedCountries.csv","2000","2009","China","Japan")
countries.top3()
countries.drawchart()**
Another Python file is stated below as well :
**import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
class Countries:
def __init__(self,syear,eyear,scountries,ecountries):
dfVisitor=pd.read_csv("ListedCountries.csv")
dfVisitor.index=pd.to_datetime(dfVisitor.index)
dfVisitor.columns=dfVisitor.colums.str.strip()
dfOther=dfVisitor.loc[syear:eyear, scountries:ecountries]
dfOtherTotal=dfOther.sum()
self.dfOtherTotalSorted=dfOtherTotal.sort_values(ascending=False)
print(self.dfOtherTotalSorted)
def top3(self):
value=self.dfOtherTotalSorted.to_dict()
c=1
print("Top 3 countries in the region over a span of 10 years")
for x, y in value.items():
if c<=3:
print(c,x,y)
c+=1 #c=c+1
if len(value)>0:
return True
else:
return False
def drawchart(self):
ps=self.dfOtherTotalSorted
index=np.arrange(len(ps.index))
plt.xlabel("No. of Visitors in 10 years visit Singapore",fontsize=10)
plt.ylabel((1000000, 2000000, 3000000, 4000000), fontsize=15)
plt.xticks(index,ps.index,fontsize=15, rotation=90)
plt.title("Total visitors from 2000 to 2009 in Singapore")
plt.bar(ps.index,ps.values)
plt.show()**
最后我有的是 CSV.file :
**Japan,HongKong,China,Taiwan,Korea
2000 Jan,72,131,16,288,38,887,19,329,32,621
2000 Feb,71,245,28,265,45,148,30,528,28,932
2000 Mar,91,844,21,513,30,644,22,934,30,682
2000 Apr,60,540,29,308,36,511,27,737,27,237
2000 May,62,152,20,822,37,934,23,635,30,739
2000 Jun,67,977,22,011,30,706,26,582,25,318
2000 Jul,84,634,30,218,36,148,35,570,32,960
2000 Aug,101,785,31,963,41,162,30,732,34,877
2000 Sep,89,417,20,566,31,239,19,824,23,207
2000 Oct,73,383,21,512,35,195,17,685,28,185
2000 Nov,80,889,21,326,32,999,17,034,31,169
2000 Dec,73,898,22,183,37,762,19,314,28,426
2001 Jan,65,381,27,778,56,460,20,418,32,727
2001 Feb,72,335,18,442,36,157,20,078,32,777
2001 Mar,85,655,27,025,30,320,16,438,32,441
2001 Apr,58,348,25,816,37,542,19,756,30,150
2001 May,58,984,19,806,41,999,16,381,28,842
2001 Jun,64,582,23,752,31,882,19,445,26,914
2001 Jul,76,373,24,929,45,570,25,185,34,830
2001 Aug,92,508,28,515,51,208,21,981,35,899
2001 Sep,69,850,20,024,34,386,15,218,23,526
2001 Oct,35,970,19,363,42,586,14,259,24,125
2001 Nov,32,294,18,583,41,208,15,219,29,452
2001 Dec,43,483,22,124,48,080,17,709,27,400
2002 Jan,47,447,16,630,50,303,18,995,38,613
2002 Feb,49,583,26,760,81,649,21,463,30,745
2002 Mar,68,549,24,043,42,728,16,038,38,393
2002 Apr,49,149,21,771,63,880,17,554,32,704
2002 May,50,563,23,490,56,486,16,570,27,807
2002 Jun,54,892,22,965,41,186,17,251,27,519
2002 Jul,66,566,26,488,51,147,25,238,32,353
2002 Aug,85,655,26,513,62,699,22,147,39,236
2002 Sep,77,884,18,914,47,217,13,553,21,472
2002 Oct,58,489,21,025,57,693,15,730,28,827
2002 Nov,54,294,17,425,56,422,11,981,28,758
2002 Dec,60,338,19,941,58,683,12,796,24,591
2003 Jan,53,131,17,336,62,454,15,826,34,976
2003 Feb,50,469,24,563,89,704,17,940,32,707
2003 Mar,54,497,16,460,54,063,11,498,25,186
2003 Apr,12,501,4,808,23,002,2,531,2,890
2003 May,7,056,5,510,3,994,1,283,2,552
2003 Jun,14,051,16,426,8,405,5,412,8,477
2003 Jul,28,636,29,541,20,989,18,298,25,714
2003 Aug,43,016,34,391,52,847,19,466,30,591
2003 Sep,47,623,17,839,57,716,13,190,20,942
2003 Oct,38,418,19,234,56,700,14,982,24,175
2003 Nov,37,630,18,368,67,541,12,271,29,059
2003 Dec,47,021,21,778,71,068,12,233,24,125
2004 Jan,39,191,22,763,79,717,17,014,30,255
2004 Feb,43,760,17,189,50,903,13,918,29,835
2004 Mar,53,022,18,564,53,481,13,060,25,853
2004 Apr,38,801,24,158,75,068,13,484,26,713
2004 May,43,714,23,922,70,021,13,963,31,482
2004 Jun,44,112,21,679,63,014,15,181,29,912
2004 Jul,56,066,27,380,92,649,21,955,35,568
2004 Aug,66,617,30,887,90,212,19,708,38,602
2004 Sep,62,264,19,562,62,134,13,542,25,956
2004 Oct,51,340,21,884,70,449,13,840,26,936
2004 Nov,48,066,19,317,88,223,12,747,31,623
2004 Dec,51,858,24,381,84,369,14,030,28,344
2005 Jan,48,004,17,457,45,801,16,774,20,386
2005 Feb,40,310,28,713,61,601,19,104,24,531
2005 Mar,52,225,31,089,52,249,15,669,23,476
2005 Apr,41,599,23,614,68,775,16,345,28,923
2005 May,43,968,25,187,62,872,16,019,28,927
2005 Jun,43,020,23,843,61,150,16,710,32,366
2005 Jul,49,791,35,295,93,889,27,702,42,961
2005 Aug,61,522,38,649,101,134,22,950,42,791
2005 Sep,57,085,23,649,67,061,15,670,25,572
2005 Oct,49,532,22,996,74,501,17,754,30,060
2005 Nov,50,402,20,552,88,704,14,094,31,277
2005 Dec,50,994,22,770,79,945,15,123,32,803
2006 Jan,45,402,23,587,81,734,19,898,40,604
2006 Feb,44,695,22,743,96,562,17,723,40,835
2006 Mar,62,353,21,726,91,092,16,227,36,144
2006 Apr,41,269,28,836,97,423,17,657,31,780
2006 May,42,907,24,008,78,594,15,410,34,236
2006 Jun,43,153,23,998,71,213,17,393,36,327
2006 Jul,52,407,28,265,113,127,27,109,45,685
2006 Aug,62,970,30,672,103,459,23,438,44,846
2006 Sep,51,284,20,463,63,550,15,350,29,315
2006 Oct,47,552,21,801,70,690,17,087,35,025
2006 Nov,52,047,22,845,88,343,15,953,43,791
2006 Dec,48,367,22,530,81,414,16,218,36,134
2007 Jan,49,959,19,559,76,116,17,156,46,756
2007 Feb,46,920,26,025,111,934,23,307,31,464
2007 Mar,58,843,22,361,79,239,16,091,42,071
2007 Apr,37,962,29,338,99,136,15,343,32,219
2007 May,38,813,25,261,85,198,14,952,34,408
2007 Jun,41,289,25,551,77,239,16,868,38,027
2007 Jul,49,234,31,990,108,881,24,849,46,123
2007 Aug,58,288,32,177,114,463,21,028,45,910
2007 Sep,54,186,22,902,76,181,16,276,30,265
2007 Oct,51,825,23,224,83,831,14,426,33,383
2007 Nov,53,784,22,638,103,906,13,742,43,965
2007 Dec,53,411,21,084,97,832,14,118,39,701
2008 Jan,52,973,19,817,108,486,16,342,50,432
2008 Feb,47,449,27,263,121,031,17,829,40,998
2008 Mar,57,364,27,600,98,180,13,778,39,683
2008 Apr,36,301,20,232,107,639,13,944,33,946
2008 May,42,382,22,867,86,785,14,276,36,412
2008 Jun,40,879,23,055,70,565,13,146,35,998
2008 Jul,47,659,28,218,105,528,19,398,39,614
2008 Aug,53,699,26,847,91,325,16,923,42,338
2008 Sep,48,771,20,765,66,582,12,303,25,914
2008 Oct,47,736,20,016,76,836,13,503,30,930
2008 Nov,48,225,19,197,79,096,12,535,24,445
2008 Dec,47,602,22,238,66,689,11,947,22,308
2009 Jan,38,382,23,399,105,144,15,986,25,516
2009 Feb,42,807,19,720,80,037,12,744,27,387
2009 Mar,46,797,21,290,91,275,12,542,20,759
2009 Apr,31,633,28,587,86,525,11,970,21,323
2009 May,29,800,21,529,52,058,11,602,21,854
2009 Jun,28,060,21,703,41,650,11,486,20,991
2009 Jul,46,633,33,382,72,326,17,351,30,389
2009 Aug,50,698,36,218,86,530,17,490,32,332
2009 Sep,52,561,21,509,59,588,10,443,15,714
2009 Oct,43,247,25,512,83,273,13,208,16,069
2009 Nov,38,949,20,525,90,358,11,900,19,620
2009 Dec,40,420,21,046,87,983,10,039,20,033
112,551,37,334,126,870,29,368,52,654**
解决方案
在您消除 CSV 文件中的嵌入逗号后,此代码有效。另一个问题是您试图打印“中国”:“日本”,但您的列的顺序不是这样。它必须是“日本”:“中国”。您还有几个拼写错误(列、排列)。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
class Countries(object):
def __init__(self,filename,syear,eyear,scountries,ecountries):
dfVisitor=pd.read_csv(filename)
dfVisitor = dfVisitor.set_index('Date')
dfVisitor.index=pd.to_datetime(dfVisitor.index)
dfOther=dfVisitor.loc[syear:eyear, scountries:ecountries]
dfOtherTotal=dfOther.sum()
self.dfOtherTotalSorted=dfOtherTotal.sort_values(ascending=False)
print(self.dfOtherTotalSorted)
def top3(self):
value=self.dfOtherTotalSorted.to_dict()
print("Top 3 countries in the region over a span of 10 years")
for x, y in list(value.items())[:3]:
print(x,y)
def drawchart(self):
ps=self.dfOtherTotalSorted
index=np.arange(len(ps.index))
plt.xlabel("No. of Visitors in 10 years visit Singapore",fontsize=10)
plt.ylabel((1000000, 2000000, 3000000, 4000000), fontsize=15)
plt.xticks(index,ps.index,fontsize=15, rotation=90)
plt.title("Total visitors from 2000 to 2009 in Singapore")
plt.bar(ps.index,ps.values)
plt.show()
countries=Countries("ListedCountries.csv",pd.to_datetime("2000-01-01"),pd.to_datetime("2009-12-31"),"Japan","China")
countries.top3()
countries.drawchart()
推荐阅读
- arrays - 数组改变值失败
- c# - 域模型的可配置显示属性
- python - 尝试用scrapy解析页面时得到
- java - 如何将 2 位数字识别为分隔数字?
- c++ - 如何 push_back 一个双向数组?
- ios - iOS - 如何检测 BLE 设备是否拒绝绑定请求?
- python - 如何有条件地将值传递给 django 的 queryset.values
- c++ - Visual Studio 代码无法调试 - 旧版驱动程序不再支持目标调试
- python - 熊猫将子循环中的新列添加回主数据框
- wpf - 为什么 XAML 定义的动画会导致 System.InvalidOperationException