разделение значения столбца на три с двумя разделителями в пандах - PullRequest
0 голосов
/ 08 мая 2018

Я написал файл Excel с одним столбцом со значениями:

col1
22125051|2/136|Possible Match
nan|3/4|Not Match
22125051|1/26|Match

эти данные изначально находятся в разных столбцах, но я хочу получить значение указанных столбцов и поместить данные в один,и я сделал это с помощью .apply () и .join (), затем я добавил разделитель |чтобы разделить значения

, теперь я хочу разделить столбец по значению, а затем поместить его в определенный столбец в существующем файле .xlsx.скажем df3 = pd.read_excel('type_primary_data.xlsx') и .columns [37], .columns [39], .columns [40]

Желаемый выход

svc_no       port      Result

22125051     2/136     Possible Match
nan          3/4       Not Match
22125051     1/26      Match

Я не уверен, что это лучший способ сделатьэто в pandas.

UPDATE

получается, что мне нужно сопоставить столбец adsl с существующим файлом .xlsx, поэтому, так как adsl совпал с указанным столбцом, я также хотел получить svc_noи результат сравнения вместе с соответствием adsl.

мой выход должен быть

adsl         svc_no       port      Result
3/4          nan          3/4       Not Match
1/26         22125051     1/26      Match
2/136        22125051     2/136     Possible Match

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вариант 1

Я фанат использования extract с именами внутри regex pattern

pat = '(?P<svc_no>.*)\|(?P<port>.*)\|(?P<Result>.*)'
df.col1.str.extract(pat, expand=True)

     svc_no   port          Result
0  22125051  2/136  Possible Match
1       nan    3/4       Not Match
2  22125051   1/26           Match

Вариант 2

cols = dict(enumerate('svc_no port Result'.split()))
df.col1.str.extractall('([^|]+)')[0].unstack().rename(columns=cols)

match    svc_no   port          Result
0      22125051  2/136  Possible Match
1           nan    3/4       Not Match
2      22125051   1/26           Match
0 голосов
/ 08 мая 2018

Попробуйте использовать метод df.str.split:

df =df[col1].str.split('|', expand=True)

Затем переименуйте столбцы, так как они будут числами с:

df.rename(columns={'oldname':'newname'}

Попробуй это. Я не могу комментировать из-за репутации, но думаю, это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...