在 Python 中通过多个分隔符将一列分成两列

Posted

技术标签:

【中文标题】在 Python 中通过多个分隔符将一列分成两列【英文标题】:Split one colum into two by multiple delimiter characters in Python 【发布时间】:2020-05-23 06:23:39 【问题描述】:

对于具有words 列的示例数据框,我想将每一行按llolut 拆分为两列:words1words2

                 words
0           helloworld
1          hellomadame
2           salutmonde
3          salutmadame
4    englishhelloworld
5   englishhellomadame
6   francaissalutmonde
7  francaissalutmadame

我怎样才能得到以下输出?谢谢。

          words1  words2
0          hello   world
1          hello  madame
2          salut   monde
3          salut  madame
4   englishhello   world
5   englishhello  madame
6  francaissalut   monde
7  francaissalut  madame

我尝试使用df.words.str.split('llo | lut', expand=True),但没有成功。有人可以帮忙吗?非常感谢。

                     0
0           helloworld
1          hellomadame
2           salutmonde
3          salutmadame
4    englishhelloworld
5   englishhellomadame
6   francaissalutmonde
7  francaissalutmadame

【问题讨论】:

您可以通过调用Series.str.split 获得结果,请参阅this answer。 【参考方案1】:

使用Series.str.replace,在字符串llolut 后添加空格,然后使用Series.str.split

df = df['words'].str.replace('(llo|lut)', r'\1 ', n=1).str.split(expand=True)
df.columns=['words1','words2']
print (df)
          words1           words2
0          hello            world
1          hello           madame
2          salut            monde
3          salut           madame
4   englishhello            world
5   englishhello           madame
6  francaissalut            monde
7  francaissalut           madame

【讨论】:

@ahbon - 引用(llo|lut) - 在llolut 之后添加空格 @ahbon - 我认为问题应该是多个llolut,如果想先拆分llolut 使用df = df['words'].str.replace('(llo|lut)', r'\1 ', n=1).str.split(expand=True).add_prefix('words') 得到它,如何拆分和设置名称而不是add_prefix 对不起,我的数据中除了words之外还有其他列,所以我不想将df['words'].str.replace('(llo|lut)', r'\1 ', n=1).str.split(expand=True)设置为df。我可以在保留其他列的同时拆分 words 吗? @ahbon - 当然,使用df[['words1','words2']] = df['words'].str.replace('(llo|lut)', r'\1 ', n=1).str.split(expand=True)【参考方案2】:

不是一个非常 Pythonic 和高效的解决方案,但这样就可以了

df = df.words.str.split('(llo|lut)', expand=True)
df[0] = df[0] + df[1]
df = df.drop(1, axis = 1)
df = df.rename(columns = 0 : "words1", 2 : "words2")

这将输出

    words1             words2
0   hello              world
1   hello              madame
2   salut              monde
3   salut              madame
4   englishhello       world
5   englishhello       madame
6   francaissalut      monde
7   francaissalut      madame

在重命名中,字典键必须是 0 和 2,因为连接后,数据框看起来像

    0              1    2
0   hello          llo  world
1   hello          llo  madame
2   salut          lut  monde
3   salut          lut  madame
4   englishhello   llo  world
5   englishhello   llo  madame
6   francaissalut  lut  monde
7   francaissalut  lut  madame

删除第1列后,它变成了

    0               2
0   hello           world
1   hello           madame
2   salut           monde
3   salut           madame
4   englishhello    world
5   englishhello    madame
6   francaissalut   monde
7   francaissalut   madame

列名是 0 和 2,因此完成了 0 和 2 的重命名。希望这会有所帮助!

【讨论】:

【参考方案3】:

只需使用单个正则表达式来拆分列:

(?<=l(?:lo|ut))
(?<=llo|lut)

请参阅regex demo。该模式是一个正向的向后查找,它匹配紧接在llolut 之前的位置。

Python 演示:

import pandas as pd

df = pd.DataFrame("words": ["helloworld","hellomadame","salutmonde","salutmadame","englishhelloworld","englishhellomadame","francaissalutmonde","francaissalutmadame"])

df = df['words'].str.split(r'(?<=l(?:lo|ut))', expand=True)
df.columns=['words1','words2']

输出:

>>> df
          words1  words2
0          hello   world
1          hello  madame
2          salut   monde
3          salut  madame
4   englishhello   world
5   englishhello  madame
6  francaissalut   monde
7  francaissalut  madame

【讨论】:

以上是关于在 Python 中通过多个分隔符将一列分成两列的主要内容,如果未能解决你的问题,请参考以下文章

如何将excel里一列字分成2列

SQL 怎么将一列中的数据按一个分隔符分成多列显示

excel如何将一行的奇偶列分成两行,如1,2,3,4,5,6一行变成1,3,5和2,4,6两行

将一列分成两列的更新?

将一列中的字符串拆分为表维护 ID 的多个分隔符

excel如何将一列按奇偶数分成两列