2015-11-19 41 views
2

雖然在尋找一種方法來在一個循環中拆分柱成多列,我偶然發現a list of useful Pandas snippets包含該表達:Python的熊貓:在表達星號標誌的含義

# Split delimited values in a DataFrame column into two new columns 
df['new_col1'], df['new_col2'] = zip(*df['original_col'].apply(lambda x: x.split(': ', 1))) 

其完美地工作,但我我無法理解它是如何運作的,尤其是在*符號方面。到現在爲止,我只在函數的定義看到星號,我一直沒能找到這種情況下的任何文件。

任何人都可以解釋它是如何工作的?

回答

2

拉鍊()*操作者結合可用於解壓縮的列表:

x = [1, 2, 3] 
y = [4, 5, 6] 
zipped = zip(x, y) 
print zipped 

輸出:

[(1, 4), (2, 5), (3, 6)] 

說明:

它從列表中抓取值:xy(在列中)並將其保存在元組中。


和(在這裏是爲你最有趣的部分):

x2, y2 = zip(*zipped) 
print x2 
print y2 

輸出:

(1, 2, 3) 
(4, 5, 6) 

說明:

  1. 拉鍊解壓的zipped內容(把內容淘汰之列)
  2. 抓起值從每一個元組,在列,並在元組保存它。

因此,如果我們把這些元組在列(前解包),他們將是這樣的:

[ 
    (1, 4) 
    (2, 5) 
    (3, 6) 
] 

打開包裝後,他們會是這樣的:

(1, 4) 
(2, 5) 
(3, 6) 

如果你見第一欄有1,2和3.第二欄有4,5,6

所以這就是zip確實與*操作者結合使用。

文檔https://docs.python.org/2/library/functions.html#zip

+0

謝謝,我已經看到它通常涉及的圖示運營商,現在它是有道理的! – PiZed

+0

@PiZed,請不要忘記接受我的答案,如果它幫助你解決問題:) –