Quebrar uma linha em linhas muliple com base no conteúdo (string) de uma coluna

votos
0

Uma coluna da minha trama de dados tem um número variável de \ns dentro de seu conteúdo e preciso de cada linha para estar em uma única linha na trama de dados final.

Este é um exemplo mínimo:

df = pd.DataFrame({'a': ['x', 'y'], 'b':['line 1\nline 2\nline 3', 'line 1' ]})

Que produz essa trama de dados de início:

    a   b
0   x   line 1\nline 2\nline 3
1   y   line 1 

Eu quero que ele se torne como este:

    a   b
0   x   line 1
1   x   line 2
2   x   line 3
3   y   line 1

Eu vi há um construído em função que converte cada patternpara uma nova coluna com o str.extractcomando abaixo, por exemplo, isso é o que eu tentei:

df['b'].str.extract(pat='(.*)\n(.*)', expand=True)

Isso produz uma saída um pouco interessante:

    0       1
0   line 1  line 2
1   NaN     NaN

Mas esta não é uma solução viável, porque os dados é dividida em colunas e não linhas, nem todos os padrões de correspondência e não está claro como colocá-lo de volta na trama de dados original no lugar e ordem. A ordem das entradas é relevante a ser preservado, embora o dataframe indexnão é.

A fim de capturar todos os padrões, seria possível fazer isso:

df['b'].transform(lambda x: x.split('\n'))

Que produz esta saída:

0    [line 1, line 2, line 3]
1                    [line 1]

Mas, novamente, não vejo uma maneira de fazer progressos a partir deste para o estado desejado.

Publicado 10/10/2019 em 00:50
fonte usuário
Em outras línguas...                            


1 respostas

votos
2

Tente usar str.spliteexplode

df = df.set_index('a').b.str.split('\\n').explode().reset_index()

Out[153]:
   a       b
0  x  line 1
1  x  line 2
2  x  line 3
3  y  line 1
Respondeu 10/10/2019 em 00:55
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more