社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

《Python for Data Analysis》书中Pythonic写法

Python爱好者社区 • 7 年前 • 645 次点击  

作者:生活缺乏心跳

个人博客: www.ethertopia.cn


最近重新阅读了《Python for Data Analysis》一书,发现好多Pythonic的写法。之前也看到过,每次看的时候都会发自内心的感叹一句“写得真好”,但是几天之后就忘了,所以这次再读的时候,打算将他们写下来。

zip

zip的用法就是将几个list,tuple或者其他队列组合成tuple的列表。最基本的用法

seq1 = ['foo', 'bar', 'baz']seq2 = ['one', 'two', 'three']zipped = zip(seq1, seq2)print (list(zipped))

结果: [('foo', 'one'), ('bar', 'two'), ('baz', 'three')]

基本的用法了解,我们来一下高级用法

pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'),('Schilling', 'Curt')] print (*a) # 打印结果为:('Nolan', 'Ryan') ('Roger', 'Clemens') ('Schilling', 'Curt') first_names, last_names = zip(*pitchers)

这里的 * 我之前也不知道怎么使用。* 可以将元素提取出来,然后用zip,将first_name和second_name分开。

dict

情境一:我们经常会遇到要从dict中取value,但是在取之前,我们并不确定key是否存在呢,所以会先判断key是否存在:

if key in my_dict:    value = my_dict[key] else:    value = default_value

优化代码:dict其实是有get方法

value = my_dict.get(key, default_value)

情境二:要将一个文档里的单词,按照首字母归类。最后的储存结果为一个dict,key是首字母,value是单词的list。 result = {"a":[],"b":[],...}

words = ['apple', 'bat', 'bar', 'atom', 'book'] result = {} for word in words:    letter = word[0]    if letter in result.key():        result[letter].append(word)    else:        result['letter'] = [word]

优化代码:dict有setdefault方法

words = ['apple', 'bat', 'bar', 'atom', 'book'] result = {} for word in words:    letter = word[0]    result.setdefault(letter, []).append(word)

sort 和 lambda

我们需要将一些string

  • 按字符长排序words = ['foo', 'card', 'bar', 'aaaa', 'abab']
    words.sort(key = lambda x : len(x))

  • 按字符不同字母数量排序words = ['foo', 'card', 'bar', 'aaaa', 'abab']
    words.sort(key = lambda x : len(set(x)))

np.where()

需要将大于0的数字变成5,将小于0的数据变成-4.

arr = np.random.randn(4,4) np.where(arr>0,5,-4)

或者大于0的数字变成5,小于0的数据不变

arr = np.random.randn(4,4) np.where(arr>0,5,arr)

np.cumsum()

我自己一直有用sum(),mean()但是很少用到累计和。这次看到了所以也记一笔。

arr = np.random.randn(4,4) #所有数字累加 arr.cumsum() np.cumsum(arr) #按列累加 arr.cumsum(axis = 0) np.cumsum(arr,axis = 0) #按行累加 arr.cumsum(axis = 1) np.cumsum(arr,axis = 1) #同理累乘 arr.cumprod()

np.any() and np.all()

我们需要判断一个数组是否都为正数

arr = np.random.randn(4,4) (arr>0).any() (arr>0).all()

巧取四分之一的数据

large_arr = np.random.randn(1000) large_arr.sort() large_arr[int(0.25 * len(large_arr)]

我觉得这上面的写法可以使我的代码精简很多,pythonic是最终目标。

如果这些中有你不熟悉的用法,那就点个赞,因为你离pythonic又近了一步。

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”开始学习Python课程

关注后在公众号内回复 课程即可获取

小编的Python入门视频课程!!!

崔老师爬虫实战案例免费学习视频。

丘老师数据科学入门指导免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

丘老师Python网络爬虫实战免费学习视频。



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/uMtqGA2R0n
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/8702
 
645 次点击