在寻找一种方法将一个列拆分成一个循环中的多个列时,我偶然发现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)))
完美无缺,但我无法理解它是如何运作的,特别是在*符号方面。到目前为止,我只在函数定义中看过星号,而且我无法找到这种情况的任何文档。
有人可以解释一下它的工作原理吗?
答案 0 :(得分:2)
zip()与 * 运算符一起用于解压缩列表:
x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
print zipped
<强>输出:强>
[(1, 4), (2, 5), (3, 6)]
<强>解释强>
它从列表中抓取值:x
和y
(在列中)并将其保存在元组中。
(这是你感兴趣的部分):
x2, y2 = zip(*zipped)
print x2
print y2
<强>输出:强>
(1, 2, 3)
(4, 5, 6)
<强>解释强>
zipped
的内容(将内容从列表中删除)因此,如果我们将这些元组放在列中(在解压缩之前),它们将如下所示:
[
(1, 4)
(2, 5)
(3, 6)
]
一旦解压缩,它们将如下所示:
(1, 4)
(2, 5)
(3, 6)
如果你看到,第一列有1,2和3.第二列有4,5,6
这就是zip
与*
运营商一起做的事情。