Python-Pandas:表达式中星号的含义

时间:2015-11-19 11:41:46

标签: python pandas

在寻找一种方法将一个列拆分成一个循环中的多个列时,我偶然发现a list of useful Pandas snippets包含了这个表达式:

 # 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)))

完美无缺,但我无法理解它是如何运作的,特别是在*符号方面。到目前为止,我只在函数定义中看过星号,而且我无法找到这种情况的任何文档。

有人可以解释一下它的工作原理吗?

1 个答案:

答案 0 :(得分:2)

  

zip() * 运算符一起用于解压缩列表:

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. zip 解压缩zipped的内容(将内容从列表中删除)
  2. 从每个元组中获取值,以列为单位,并将其保存在元组中。
  3. 因此,如果我们将这些元组放在列中(在解压缩之前),它们将如下所示:

    [
        (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