Как мне разделить несколько столбцов? - PullRequest
1 голос
/ 01 ноября 2019

Я хотел бы разделить каждый из столбцов в наборе данных.

Идея состоит в том, чтобы разделить число между "/" и строку между "/" и "@" и поместить эти значения в новые столбцы.

Я попробовал вот так:

new_df = dane['1: Brandenburg'].str.split('/',1)

и затем создал для него новые столбцы. Но я не хочу делать это для всех 60 столбцов.

first column

1: Branburg :
ES-NL-10096/1938/X1@hkzydzon.dk/6749
BE-BR-6986/3551/B1@oqk.bf/39927
PH-SA-39552610/2436/A1@venagi.hr/80578
PA-AE-59691/4881/X1@zhicksl.cl/25247 

second column 

2: Achon :
DE-JP-20082/2066/A2@qwier.cu/68849
NL-LK-02276/2136/A1@ozmdpfts.de/73198
OM-PH-313/3671/Z1@jtqy.ml/52408
AE-ID-9632/3806/C3@lhbt.ar/83484

etc,etc...

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Как я понял, вы хотите извлечь две части из каждой ячейки. Например, из ES-NL-10096/1938/X1@hkzydzon.dk/6749 следует извлечь:

  • 1938 - число между слешами,
  • X1 - строка между вторым слешем и @.

Для этого вы можете выполнить:

df.stack().str.extract(r'/(?P<num>\d+)/(?P<txt>[A-Z\d]+)@')\
    .stack().unstack([1, 2])

Вы получите MultiIndex для столбцов:

  • верхний уровень - имя столбца «источника»,
  • второй уровень - num и txt - 2 извлеченные "части".

Для ваших данных выборки результат:

  1: Brandenburg     2: Achon    
             num txt      num txt
0           1938  X1     2066  A2
1           3551  B1     2136  A1
2           2436  A1     3671  Z1
3           4881  X1     3806  C3
0 голосов
/ 01 ноября 2019

Вы можете использовать df.apply() для перебора всех столбцов вашего Dataframe и применения данной функции. Вот пример:

def fn(col):
    return col.str.split('/',1)

new_df = dane.apply (lambda col: fn(col), axis=1)

Здесь axis=1 означает итерацию по всем столбцам. Надеюсь, это поможет!

...