我有这样的东西 我在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'}))
请帮助:)
答案 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