摘要:
由于《利用Python进行数据分析》是基于Python2.7版本编写的,而随着Python3.x的普以及pandas的版本迭代(目前的版本号为:0.23.4)。,这本六年前出版(第一版出版于2012年)的书却迟迟没有更新,在使用的时候难免会遇到一些障碍,所以我将在学习这本书的过程中遇到的问题和解决办法以及学习学习笔记都分享给大家。给之后阅读这本书的读者更够一个参考,少走一些弯路。我在重写本书代码时遇到的各种问题都会分章节的给大家解决。作者第一次写技术类博客,而且时间和精力有限,文中错误比较多,若读者们发现错谬之处,请不吝告知,以免误导他人。
第二章:引言
Movielens 1M
top_female_ratings=mean_ratings.sort_index(by='F',ascending=False)
FutureWarning: by argument to sort_index is deprecated, please use .sort_values(by=…)
解决办法:用.sort_values(by=…)替换.sort_index(by=…)。mean_ratings=data.pivot_table('rating',rows='title',cols='gender',aggfunc='mean)
可能pandas版本的原因,现在版本的.pivot_table()没有rows,cols参数。
解决方法:
将代码改为mean_ratings=data.pivot_table('rating',index='title',columns='gender',aggfunc='mean')
。
参考文献:
pandas官网文档链接
《利用Python进行数据分析》第二章pivot_table报错问题rating_std_by_title.order(asending=False)[:10]#以上相同问题的补充
Series没有order()函数
解决方法:
rating_std_by_title=rating_std_by_title.sort_values(ascending=False)[:10]
使用.sort_values()对Series按值进行排序。
方法扩展:
print ('series通过索引进行排序:')
series.sort_index()
print ('series通过值进行排序:')
series.sort_values()
print ('dataframe根据行索引进行降序排序(排序时默认升序,调节ascending参数):')
frame.sort_index(ascending=False)
print ('dataframe根据列索引进行排序:')
frame.sort_index(axis=1)
print ('dataframe根据值进行排序:')
frame.sort_values(by='a')
print ('通过多个索引进行排序:')
frame.sort_values(by=['a','c'])
参考文献:
《pandas学习:对series和dataframe进行排序》
1880-2010年间全美婴儿姓名
names=pd.concat(pieces,ignore_index=True)
笔记:
concatenation
n. 串联,连结
这里需要注意几件事情:
第一, concat默认是按行将多个 Dataframe组合到一起的;
第二,必须指定 ignore_ index=True,因为我们不希望保留 read csv所返回的原始行号。total_births=names.pivot_table('births',rows='year',cols='sex',aggfunc=sum)
TypeError: pivot_table() got an unexpected keyword argument ‘rows’
解决方法:
total_births=names.pivot_table('births',index='year',columns='sex',aggfunc=sum)
参考文献:
《利用Python进行数据分析》第二章pivot_table报错问题group.sort_index(by='births',ascending=False)[:1000]#以上相同问题的补充
FutureWarning: by argument to sort_index is deprecated, please use .sort_values(by=…)
我之后查阅了pandas的官方文档才知道:在新版的pandas中,对Series或者·Dataframe进行排序有两种方法。分别是
.sort_index()
和.sort_values()
。其功能分别是按索引对Series或者Dataframe进行排序和按值进行排序。total_births=top1000.pibot_table('births',rows='year',cols='name',aggfunc=sum)
TypeError: pivot_table() got an unexpected keyword argument ‘rows’
解决方法:同上。
total_births=top1000.pivot_table('births',index='year',columns='name',aggfunc=sum)
diversity.plot(title='Number of popular names in top 50%')
TypeError: Empty ‘DataFrame’: no numeric data to plot
错误原因:
def get_quantile_count(group,q=0.5):
group.sort_values(by='prop',ascending=False)
return (group.prop.cumsum().searchsorted(q)+1)
(group.prop.cumsum().searchsorted(q)+1)
返回的是numpy数组(class <’numpy.ndarray’>),而不是浮点,因此不能进行绘图。
解决方法:应将numpy数组中的数据取出单独写入Dataframe。
def get_quantile_count(group,q=0.5):
group.sort_values(by='prop',ascending=False)
return (group.prop.cumsum().searchsorted(q)+1)[0]
参考文献:
Python数据分析示例(3)Day4