我在pandas数据框中有一个列,我需要将该列拆分成多个列,我面临的问题是该列的值没有定界符。这是数据框
import pandas as pd
data = ['MSFT220121C00180000','MSFT220121C00185000','MSFT220121C00200000']
df = pd.DataFrame(data, columns = ['contract'])
df
输出
contract
0 MSFT220121C00180000
1 MSFT220121C00185000
2 MSFT220121C00200000
所需的输出
ticker date type series
0 MSFT 220121 C 00180000
1 MSFT 220121 C 00185000
2 MSFT 220121 C 00200000
我用正则表达式尝试过一些
r = re.compile("([a-zA-Z]+)([0-9]+)")
('MSFT', '220121')
没有给我想要的结果。
答案 0 :(得分:1)
您可以将series.str.extractall()
与unstack()
结合使用:
m=df.contract.str.extractall('([a-zA-Z]+)([0-9]+)').unstack().sort_index(level=1,axis=1)
m.columns=['ticker','date','type','series']
print(m)
或者:
import itertools
m=pd.DataFrame([[*itertools.chain.from_iterable(i)]
for i in df.contract.str.findall('([a-zA-Z]+)([0-9]+)')],
columns=['ticker','date','type','series'])
ticker date type series
0 MSFT 220121 C 00180000
1 MSFT 220121 C 00185000
2 MSFT 220121 C 00200000