《Python for Data Analysis》书中Pythonic写法

浏览: 1431

作者:生活缺乏心跳

个人博客: 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网络爬虫实战免费学习视频。

image.png

推荐 0
本文由 Python爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册