调用Series的order属性出错
tot = tot.order(ascending=False)
具体报错:
'Series' object has no attribute 'order'
错误原因:python3以后Series的order属性改为sort_values(),将原始代码修改为:
tot = tot.sort_values(ascending=False)
自定义csv.dialect出错
class my_dialect(csv.Dialect):
lineterminator = '\n'
delimiter = ';'
quotechar = '"'
具体报错:
"quoting" must be an integer
错误原因:
quoting引用约定不能省略,可以改为:
class my_dialect(csv.Dialect):
lineterminator = '\n'
delimiter = ';'
quotechar = '"'
quoting = csv.QUOTE_MINIMAL
给quoting添加默认值。
导入urllib2出错
错误代码:
from urllib2 import urlopen
代码报错:
ModuleNotFoundError: No module named 'urllib2'
错误原因:python2的urllib2模块在python3中被整合进urllib
修改为:
from urllib import request
使用urlopen时使用request.urlopen()
调用
导入StringIO出错
错误代码:
from StringIO import StringIO
代码报错:
No module named 'StringIO'
报错原因:python3中取消了StringIO包,可以使用io中的StringIO方法执行StringIO操作
修改为:
import io
…
root = objectify.parse(io.StringIO(tag)).getroot()
** DataFrame的save方法无法使用**
错误代码:
frame.save('ch06/frame_pickle')
代码报错:
AttributeError: 'DataFrame' object has no attribute 'save'
错误原因:
python3取消了save方法,改用to_pickle和read_pickle来对二进制pickle序列存取,代码修改为:
frame.to_pickle('ch06/frame_pickle')
pd.read_pickle('ch06/frame_pickle')
使用zip构造DataFrame出错
错误代码:
DataFrame(rows, columns=zip(*cursor.description)[0])
代码报错:
'zip' object is not subscriptable
将代码修改为:
DataFrame(rows, columns=list(zip(*cursor.description))[0])
read_frame函数读取出错
错误代码:
sql.read_frame('select * from test', con)
代码报错:
module 'pandas.io.sql' has no attribute 'read_frame'
出错原因:read_frame已停用,改用read_sql,代码修改为:
sql.read_sql('select * from test', con)
使用dataframe的drop_duplicates报错
错误代码:
data.drop_duplicates(['k1', 'k2'], take_last=True)
错误详情:
TypeError: drop_duplicates() got an unexpected keyword argument 'take_last'
出错原因:去重的drop_duplicates()已经取消了take_last参数,使用’last’/'first’参数确定保留重复值的先后,代码修改为:
data.drop_duplicates(['k1', 'k2'], 'last')
错误代码:
In [69]:
party_counts = pd.crosstab(tips.day, tips.size)
出现问题:
交叉表无法成功将值按照tips.size进行分列,原因是因为列名size和Dataframe自带属性重名,所以要在csv中将size列名改为其他,然后再使用交叉表进行分组:
例如:
party_counts = pd.crosstab(tips.day, tips.psize)
通过Basemap绘制点出错
错误代码:
x, y = m(cat_data.LONGITUDE, cat_data.LATITUDE)
代码报错:
TypeError: input must be an array, list, tuple or scalar
错误原因,cat_data.LONGITUDE和cat_date.LATITUDE不是数值型,应该改为:
x, y = m(cat_data.LONGITUDE.values, cat_data.LATITUDE.values)
生成扑克牌数列失败
错误代码:
card_val = (range(1, 11) + [10] * 3) * 4
代码报错:
TypeError: unsupported operand type(s) for +: 'range' and 'list'
错误原因:使用range(1, 11)生成的range数据不能和list数据直接相加,要先将range生成的结果强制转换成list然后再相加,应修改为:
card_val = (list(range(1,11)) + [10] * 3) * 4