Przerwa wiersza do muliple rzędach na podstawie (strun) Zawartość kolumny

głosy
0

Jedna kolumna mojego dataframe ma zmienną liczbę \ns wewnątrz jego treścią i muszę każdą linię, aby być w jednym wierszu na końcowym dataframe.

Jest to minimalny przykład:

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

Która produkuje ten dataframe wywoławcza:

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

Chcę, aby stało się tak jak ten:

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

Widziałem tam jest wbudowana funkcja, która przekształca każdy patterndo nowej kolumny z str.extractponiższej komendy, na przykład, jest to, co starałem:

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

Która produkuje nieco ciekawy wynik:

    0       1
0   line 1  line 2
1   NaN     NaN

Ale to nie jest dobrym rozwiązaniem, ponieważ dane są podzielone na kolumnach, a nie rzędach, nie wszystkie wzory dopasowane i nie jest jasne, w jaki sposób umieścić go z powrotem na oryginalnym dataframe w miejscu i porządku. Kolejność zgłoszeń ma znaczenie mają być zachowane, chociaż dataframe indexnie jest.

W celu uchwycenia wszystkich wzorców, to byłoby możliwe, aby to zrobić:

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

Że daje to wyjściowy:

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

Ale znowu, nie widzę sposobu, aby postępy od tego do pożądanego stanu.

Utwórz 10/10/2019 o 00:50
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
2

Spróbuj użyć str.splitiexplode

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
Odpowiedział 10/10/2019 o 00:55
źródło użytkownik

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