首页 > 解决方案 > 正则表达式匹配多个前缀,解压到列

问题描述

对正则表达式采取本系列的任何建议

import pandas as pd
import numpy as np

data = [
    'Apple: very tasty',
    'Banana: Unpleasant',
    'Apple: quite nice  Banana: not bad either',
    '',
]

ser = pd.Series(data=data)

在此处输入图像描述

进入这个产生的DataFrame?

pd.DataFrame(data=[
    ['very tasty', np.nan],
    [np.nan, 'Unpleasant'],
    ['quite nice', 'not bad either'],
    [np.nan, np.nan],
], columns = ['Apple', 'Banana'])

在此处输入图像描述

如果 Apple 和 Banana 存在,它们总是按 Apple、Banana 的顺序排列,并用空格隔开。

标签: pythonregexpandas

解决方案


你可以这样做:

df_out = pd.DataFrame(df.values.reshape(-1,2),
                      index=np.repeat(np.arange(df.shape[0]),df.shape[1]//2))

df_out = pd.DataFrame()

df = ser.str.split(':|\s\s',expand=True)

对于 df.groupby(df.columns // 2, axis=1) 中的 n,g:

df_out = pd.concat([df_out, pd.DataFrame(g.values)])

df_out.set_index(0, append=True)[1].unstack().dropna(1, how='all')

输出:

         Apple           Banana
0   very tasty              NaN
1          NaN       Unpleasant
2   quite nice   not bad either
3          NaN              NaN

推荐阅读