Разбейте pandas dataframe на отдельные строки, разбив столбец на новые строки - PullRequest
1 голос
/ 20 сентября 2019

У меня есть пандас, в котором столбец содержит абзацы текста.Я хотел разбить фрейм данных на отдельные строки, разбив абзацы текста на новые строки.Абзац текста может содержать несколько новых строк или символы возврата носителя, как показано ниже.Для упрощения я создал следующий пример

    A                                             B  index_col
0  A0                                            B0          0
1  A1  split this\n\n into \r\n separate \n rows \n          1
2  A2                                            B2          2
3  A3                                            B3          3

Я попытался разбить ряд на несколько значений и объединить их в один столбец, используя метод стека.Я не могу получить желаемый результат.Любые предложения будут высоко оценены!

b = pd.DataFrame(df['B'].str.split('\n').tolist(), index=df['index_col']).stack()
    b = b.reset_index()[[0, 'index_col']]
    b.columns = ['B', 'index_col']
Current output:
            B  index_col
0          B0          0
1  split this          1
2                      1
3     into \r          1
4   separate           1
5       rows           1
6                      1
7          B2          2
8          B3          3

Desired output:
            B  index_col
0          B0          0
1  split this          1
2     into             1
3   separate           1
4       rows           1
5          B2          2
6          B3          3

1 Ответ

0 голосов
/ 20 сентября 2019

Образец :

df = pd.DataFrame({'A':['A0','A1'],
                    'B':['B0', 'split this\n\n into \r\n separate \n rows \n'],
                   'index_col':[0,1]})
print (df)
    A                                             B  index_col
0  A0                                            B0          0
1  A1  split this\n\n into \r\n separate \n rows \n          1

Ваше решение должно быть изменено на DataFrame.set_index, Series.str.replace добавлено expand=True кSeries.str.split для DataFrame и последний установщик пустых строк из B на DataFrame.query:

df1 = (df.set_index('index_col')['B']
         .str.replace('\r', ' ')
         .str.split('\n', expand=True)
         .stack()
         .rename('B')
         .reset_index(level=1, drop=True)
         .reset_index()[['B', 'index_col']]
         .query("B != ''"))
print (df1)
            B  index_col
0          B0          0
1  split this          1
3      into            1
4   separate           1
5       rows           1

Для панд 0,25+ возможно использованиеDataFrame.explode:

df['B'] = df['B'].str.replace('\r', ' ').str.split('\n')
df1 = df[['B', 'index_col']].explode('B').query("B != ''")
print (df1)
            B  index_col
0          B0          0
1  split this          1
1      into            1
1   separate           1
1       rows           1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...