用python进行数据分析会遇到的问题_《利用python进行数据分析》常见问题汇总(一)...

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

第1章 准备工作

IPython安装及使用:

开始菜单输入cmd进入命令行;

输入"pip install ipython"进行安装;

输入ipython进入IPython运行模式。

书中示例数据下载地址:

https://github.com/wesm/pydata-book/tree/1st-edition

第2章 引言

本书使用的是python2.7版本,和python3语法有细微差别。

后面几章主要的代码问题都是python版本更新造成的方法淘汰和重新整合。

来自bit.ly的1.usa.gov数据

print语法

In [20] :

print records[0]['tz']

改为

print(records[0]['tz'])

pylab模式绘图

使用plot方法时要以pylab模式打开。

In [301]:

tz_counts[:10].plot(kind='barh', rot=0)

运行返回

未弹出图像窗口;

在IPython运行下输入 pylab打开pylab模式,然后重新运行 [301]成功绘图。

movielens 1m数据集

pivot_table方法

原代码报错:

mean_ratings = data.pivot_table('rating', rows='title',cols='gender', aggfunc='mean')

错误信息为:

TypeError Traceback (most recent call last)

in ----> 1 mean_ratings = data.pivot_table('rating', rows='title',cols='gender', aggfunc='mean')

TypeError: pivot_table() got an unexpected keyword argument 'rows'

将代码修改为:

mean_ratings = data.pivot_table('rating', index='title',columns='gender', aggfunc='mean')

ix函数警告

In[347]:

mean_ratings = mean_ratings.ix[active_titles]

出现如下警告:

DeprecationWarning:

.ix is deprecated. Please use

.loc for label based indexing or

.iloc for positional indexing

可以使用ix函数已经被loc和iloc函数替代,其中loc函数是使用标签进行的索引,而iloc函数是使用位置即行列号进行的索引,所以在此处可以使用loc函数进行查找。

Series没有order函数

In [358]:

rating_std_by_title.order(ascending=False)[:10]

属于报错,错误信息如下:

AttributeError: 'Series' object has no attribute 'order'

由于Series没有order函数,可以使用sort_valuesh()函数对得分标准差进行排序:

rating_std_by_title.sort_values(ascending=False)[:10]

1880-2010年间全美婴儿姓名

diversity.plot绘图出错

In [402]:

diversity.plot(title="Number of popular names in top 50%")

错误类型为:

TypeError: Empty 'DataFrame': no numeric data to plot

错误原因出现在前面的get_quantile_count函数:

def get_quantile_count(group, q=0.5):

group = group.sort_index(by='prop',ascending=False)

return group.prop.cumsum().searchsorted(q) + 1

该函数最后一句group.prop.cumsum().searchsorted(q)返回的是ndarray中的数组而不是浮点数,因此不能正确绘图。

解决方法是使用索引将数组中的数值取出:

def get_quantile_count(group, q=0.5):

group=group.sort_values(by='prop',ascending=False)

return group.prop.cumsum().searchsorted(q)[0] + 1

即可正确绘图。

第4章 numpy基础:数组和矢量计算

随机数生成

随机数生成出错

In [212]:

%timeit samples = [normalvariate(0, 1) for _ in xrange(N)]

代码报错:

NameError: name 'xrange' is not defined

错误原因是Python 3中,range()与xrange()合并为range( )。将原始代码改为:

%timeit samples = [normalvariate(0, 1) for _ in range(N)]

第5章 pandas入门

汇总和计算描述统计

pandas.io.data模块导入出错

import pandas.io.data as web

代码报错:

ModuleNotFoundError: No module named 'pandas.io.data'

出错原因:pandas.io.data模块已经迁移到pandas-datareader模块,将原始代码改为:

import pandas_datareader.data as web

data.iteritems()调用出错

price = DataFrame({tic:data['Adj Close'] for tic, data in all_data.iteritems()})

代码报错:

AttributeError: 'dict' object has no attribute 'iteritems'

出错原因:

python3中data没有iteritems属性,改为items,将原始代码改为:

price = DataFrame({tic:data['Adj Close'] for tic, data in all_data.items()})

其他有关pandas的话题

整数索引

使用Series的iget_value方法报错

In [293]:

ser3.iget_value(2)

代码报错:

AttributeError: 'Series' object has no attribute 'iget_value'

出错原因:iget_value()函数已被iat[]函数替代,将原始代码改为:

ser3.iat[2]

使用DataFrame的irow方法报错

In [295]:

frame.irow(0)

代码报错:

'DataFrame' object has no attribute 'irow'

出错原因:irow方法和icol方法已经被淘汰,可以使用iloc[:, i]选取列,使用iloc[i, :]选取行,将原始代码改为:

frame.iloc[0,:]

面板数据

使用get_data_yahoo方法报错

pdata = pd.Panel(dict((stk,web.get_data_yahoo(stk,‘1/1/2009’,‘6/1/2012’))

for stk in [‘AAPL’,‘GOOG’,‘MSFT’,‘DELL’]))

代码报错:

KeyError: ‘Date’

出错原因:自己没有找到原因,修改了起止日期仍然无法读取数据,看了别的博主说是网络问题,暂未发现解决方法(有知道的大神可以在评论区留言)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值