2015-11-19 2 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)] 

Объяснение:

Он извлекал значения из списков: x и y (в столбцах) и сохранял их в кортежах.


И (вот интересная часть для вас):

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, пожалуйста, не забудьте принять мой ответ, если это поможет вам решить проблему :) –

Смежные вопросы