小蜗牛开启Python爬行之路……路很长,并且可能弯弯绕绕,但是小蜗牛的方向永远是向前
看了几个Python教学视频后,决定还是上手吧,能够完成任务,才算真的学会。实践的过程果然不太顺利,看慕课网上北理嵩天教授的课程时,觉得很清晰,可是一上手,细节问题多多。嵩老师的案例中用的数据都是主动生成的,而我,需要从excel中先导入数据(目前工作中的数据来源于excel),于是我开始一步步摸索。以下是我遇到的几个问题:
1. 获取excel单元格位置
各论坛的教程都是sheet.cell(row,column),一直显示有问题,错误如下:
TypeError: cell() got an unexpected keyword argument 'row’
显然是cell的行列索引表达有问题,在ipython中数据sheet.cell后,得到提示,()中应该是“rowx,colx”,如图:
于是修改为
sheet.cell(rowx=i,colx=j)
问题解决
2. sheet.cell()获取的是什么?
为了索引方便,用了pandas库的DataFrame和matplotlib.pyplot画图,可是在前面查看所有读取数据都无问题后,最后一步总是有问题,报错如下:
TypeError: float() argument must be a string or a number, not 'Cell’
复制了这句话,查了好久,都没有解决这个not cell的问题。因为是最后一步出问题,一直在最后几行修改,尝试了换成原数组进行索引,用plot画图都不行。最后查到一篇与问题不太相关的帖子,但其中提到了取值value,点醒了我!带着猜测,试了一下,在取到sheet.cell后,是不是要再取cell中的值?修改如下:
value= sheet.cell(rowx=i,colx=j).value
至此,代码通了,图如约出现!
(貌似是全程跟这句话杠上了,毕竟这是自我发挥的,毛病多多……)
附上整体代码:
import numpy as np
import xlrd
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
entirety=xlrd.open_workbook('E:\python\data.xlsx')
sheet=entirety.sheets()[2]
n=0
m=0
citydata=[]
for i in range(59,75):
for j in range(2,7):
value= sheet.cell(rowx=i,colx=j).value
#value= sheet.cell(i,j).value
citydata.append(value)
m=m+1
n=n+1
table=np.reshape(citydata,(16,5))
matplotlib.rcParams['font.family']='SimHei'
'''
#方法一:数组索引
x=table[1:,0]
y=table[1:,1]
y_float=y.astype(np.float)
plt.plot(x,y_float)
'''
#方法二:DataFrame索引
newtable=pd.DataFrame(table,columns=['市州','基础移网','基础固网','新兴ICT','收入同比'])
endtable=newtable.drop(0)
plt.plot(endtable['市州'],endtable['基础移网'].astype(np.float),'g-',endtable['市州'],endtable['基础固网'].astype(np.float),'b*-',endtable['市州'],endtable['新兴ICT'].astype(np.float),'r-.')
plt.show()
图形效果如下: