Преобразование строки Python, удаление пробелов, добавление дефисов - PullRequest
0 голосов
/ 24 января 2019

У меня есть столбец во фрейме данных pandas, отформатированный как

f1 d3 a4 0a d0 6a 4b 4a 83 d4 4f c9 1f 15 11 17

и я хочу преобразовать его так:

f1d3a40a-d06a-4b4a-83d4-4fc91f151117

Я знаю, что могу использовать replace(" ", "") для удаления пробелов, но я не уверен, как вставить дефисы в те места, которые мне нужны.

Я также не уверен, как применить его к объекту серии панд.

Буду признателен за любую помощь!

Ответы [ 2 ]

0 голосов
/ 24 января 2019
a = "f1 d3 a4 0a d0 6a 4b 4a 83 d4 4f c9 1f 15 11 17"
c = "f1d3a40a-d06a-4b4a-83d4-4fc91f151117"
b = [4,2,2,2,6]

def space_2_hyphens(s, num_list,hyphens = "-"):
    sarr = s.split(" ")
    if len(sarr) != sum(num_list):
        raise Exception("str split num must equals sum(num_list)")
    out = []
    k = 0
    for n in num_list:
        out.append("".join(sarr[k:k + n]))
        k += n
    return hyphens.join(out)


print(a)
print(space_2_hyphens(a,b))
print(c)
0 голосов
/ 24 января 2019

Это похоже на UUID, поэтому я бы просто использовал этот модуль

>>> import uuid
>>> s = 'f1 d3 a4 0a d0 6a 4b 4a 83 d4 4f c9 1f 15 11 17'
>>> uuid.UUID(''.join(s.split()))
UUID('f1d3a40a-d06a-4b4a-83d4-4fc91f151117')
>>> str(uuid.UUID(''.join(s.split())))
'f1d3a40a-d06a-4b4a-83d4-4fc91f151117'

EDIT:

df = pd.DataFrame({'col':['f1 d3 a4 0a d0 6a 4b 4a 83 d4 4f c9 1f 15 11 17',
                          'f1 d3 a4 0a d0 6a 4b 4a 83 d4 4f c9 1f 15 11 17']})

df['col'] = df['col'].str.split().str.join('').apply(uuid.UUID)
print (df)
                                    col
0  f1d3a40a-d06a-4b4a-83d4-4fc91f151117
1  f1d3a40a-d06a-4b4a-83d4-4fc91f151117
...