如何基于换行符拆分Python数据框?

4

我有一个pandas数据框,其中一列包含了一段段的文本。我希望将这个数据框按照换行符拆分为多列。每段文本可能包含多个换行符。

示例数据框:

Current output:
A
foo bar
foo bar\nfoo bar
foo bar
foo bar

Desired output:

   A         B                                                      
0 foo bar                                                  
1 foo bar   foo bar                                                 
2 foo bar                                                  
3 foo bar                                                  


我尝试使用了这个:
df.A.str.split(expand=True))


但是它会在每个空格处分割,而不是如预期的在“/n”处分割。
3个回答

2
如文档所述,您可以在split方法的(可选)参数par中指定要拆分的分隔符,否则它将仅在空格上进行拆分:docs
因此,您可以执行以下操作来实现换行符拆分功能:
df.A.str.split(pat="\n", expand=True)

1
你需要将要分割字符串的模式作为参数传递给series.str.split()。这里有一个完整的可重现的例子,适用于Windows系统:
import pandas as pd

df = pd.DataFrame({'A': ['foo bar', 
                         'foo bar\nfoo bar',
                         'foo bar',
                         'foo bar']})

df.A.str.split(pat='\n', expand=True)

    0           1
0   foo bar     None
1   foo bar     foo bar
2   foo bar     None
3   foo bar     None

为了实现跨平台的解决方案,我会采用类似于@ThePyGuy答案的方法,但使用str.splitlines(),因为这种方法可以识别来自不同系统的行边界。

df.A.apply(str.splitlines).apply(pd.Series).fillna('')

嗯,对我来说是可以工作的(Python 3.9.5,pandas 1.2.5)。当你尝试时具体发生了什么? - Arne
它不会分裂 - ThePyGuy
我添加了一个完整的例子。在你的系统上是否可以按此运行? - Arne
不,它不是这样的。 - ThePyGuy
我已经添加了一个跨平台的解决方案。 - Arne

0
你可以尝试以下方法:使用Python的本地str.split应用于列,然后应用pd.Series将其拆分为多个列。
>>> df.A.apply(lambda x: x.split(r'\n')).apply(pd.Series).fillna('')

         0        1
0  foo bar         
1  foo bar  foo bar
2  foo bar         
3  foo bar         

最后,您只需重命名列即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接