大熊猫用正则表达式分成几列

时间:2020-06-19 10:34:59

标签: python regex pandas

我有这样的东西 我在DataFrame中有这样的列

Column1
message1 message2 notmessage
message1 message2 
message1 message2 message3 notmessage

我想要一个数据框,例如:

Column1                                 |  A        | b        | c
message1 message2 notmessage            |  message1 | message2 | null
message1 message2                       |  message1 | message2 | null
message1 message2 message3 notmessage   |  message1 | message2 | message3 

使用

从Column1中获取第一个值没有问题。
df['A'] = df['Column1'].str.extract('(my_regex)',expand=True)

但是如何获得3个新列? 我正在尝试使用此方法:https://stackoverflow.com/a/39358924当我在其他文件中使用split方法时,它对我有用,但是对于正则表达式拆分,它不适用于我,如下所示:

df.join(df['Column1'].str.extract('(my_regex)',expand=True).rename(columns={0:'A', 1:'B', 2:'C'}))

请帮助:)

2 个答案:

答案 0 :(得分:1)

我相信您需要Series.str.extractall并选择第一列0并通过Series.unstack重塑:

d = {0:'A', 1:'B', 2:'C'}
df = df.join(df['Column1'].str.extractall('(my_regex)')[0].unstack().rename(columns=d))

答案 1 :(得分:0)

获取所有3列:

import pandas as pd

df = pd.DataFrame(["message1 message2 notmessage",
                   "message1 message2",
                   "message1 message2 message3 notmessage"
                   ],
                  columns=["Column1"]
                  )

df['A'] = df['Column1'].str.extract('(^\w+)',
                                    expand=True
                                    )

df['b'] = df['Column1'].str.extract('(?<=\s)(\w+).*',
                                    expand=True
                                    )

df['c'] = df['Column1'].str.extract('(\w+3).*',
                                    expand=True
                                    )

print(df)

结果:

                                 Column1         A         b         c
0           message1 message2 notmessage  message1  message2       NaN
1                      message1 message2  message1  message2       NaN
2  message1 message2 message3 notmessage  message1  message2  message3