《利用python进行数据分析》常见问题汇总(二)

利用python进行数据分析 麦金尼 代码实测常见问题汇总

第6章 数据加载、存储与文件格式

逐块读取文本文件

调用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添加默认值。

XML和HTML:Web信息收集

导入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)

第7章 数据规整化:清理、转换、合并、重塑

数据转换

移除重复数据

使用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')

第8章 绘图和可视化

pandas函数中的绘图函数

错误代码:
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)

第9章数据聚合与分组运算

分组级运算和转换

示例:随机采样和排列

生成扑克牌数列失败
错误代码:

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

你可能感兴趣的:(数据分析,图书代码修正)