《Python for Data Analysis》書中Pythonic寫法

最近重新閱讀了《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又近了一步。

謝謝大家支持呢。要不到200贊就給這本書的鏈接咯,這樣大家也可以一起交流呢。


推薦閱讀:

為什麼numpy的array那麼快?
ImagePy教程 —— 幾何變換
python與numpy使用的一些小tips(2)
《利用python進行數據分析》——Chap4:numpy

TAG:Python | 數據分析 | numpy |