Python-Pandas:表达式中星号的含义
在寻找一种方法把一列数据在循环中拆分成多列时,我偶然发现了一些有用的Pandas代码片段,里面有这样一个表达式:
# 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 个回答
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)
解释:
- zip 解压了
zipped
的内容(把列表里的内容拿出来) - 按列提取每个元组中的值,并把它们保存成新的元组。
所以如果我们把这些元组按列放在一起(在解压之前),它们看起来是这样的:
[
(1, 4)
(2, 5)
(3, 6)
]
一旦解压,它们会变成这样:
(1, 4)
(2, 5)
(3, 6)
你会看到,第一列有 1、2 和 3,第二列有 4、5、6。
所以这就是 zip
和 *
操作符一起做的事情。