使用正则表达式将Pandas拆分为列

2024-09-25 02:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有类似的东西 我在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 

使用从列1获取第一个值没有问题

df['A'] = df['Column1'].str.extract('(my_regex)',expand=True)

但是我如何才能获得3个新列? 我试着使用这个:https://stackoverflow.com/a/39358924当我在其他文件中使用split方法时,它对我有效,但在使用regex拆分时,它对我无效,如下所示:

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

请帮忙:)


Tags: 数据truedataframedfmyextractnullregex
2条回答

我相信您需要使用^{}选择第一列0并通过^{}重塑:

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

获取所有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

相关问题 更多 >