我有pandas数据框,其中一列包含文本段落。我想通过将文本段拆分为换行符来将数据框分解为单独的行。文本的段落可能包含多个新行或载体返回字符,如下所示。为了简化,我创建了以下示例
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
答案 0 :(得分:0)
示例:
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
的{{1}}添加到Series.str.split
中,最后从DataFrame
中填充空字符串由DataFrame.query
:
B
对于熊猫0.25+,可以使用DataFrame.explode
:
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