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

2 投票
1 回答
3898 浏览
提问于 2025-05-10 15:22

在寻找一种方法把一列数据在循环中拆分成多列时,我偶然发现了一些有用的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)]

解释:

它从列表 xy 中提取了值(按列提取),并把这些值保存成了元组。


还有(这部分对你来说很有趣):

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

输出结果:

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

解释:

  1. zip 解压了 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

撰写回答